Я хочу прочитать данные, отправленные сервером (мой сервер - esp8266)

У меня есть клиентское соединение с сервером, и я пытаюсь прочитать сообщения, отправленные сервером. Я могу отправить сообщение на сервер, но когда я пытаюсь прочитать сообщения в своем приложении, я не знаю, как читать это сообщение. Мой сервер - это модуль ESP8266.

Я могу отправить сообщение с помощью этого модуля, но я не знаю, как прочитать это сообщение в Main3Activity.

Это код, который я использую:

public class Main3Activity extends AppCompatActivity {

    public static String data = " ";

    Socket client;
    SocketAddress socketAddress;
    OutputStream outputStream;

    String ServerIP = "192.168.1.1";
    int ServerPort = 8888;

    String message;
    public final static String msg = null;

    public int i;


    EditText et_ServerIP, et_ServerPort;
    TextView tv_DataSendRecive, info;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);


        tv_DataSendRecive = (TextView) findViewById(R.id.tv_DataSendRecive);
        info = (TextView) findViewById(R.id.info);
        et_ServerIP = (EditText) findViewById(R.id.et_ServerIP);
        et_ServerPort = (EditText) findViewById(R.id.et_ServerPort);


    }

    public void onClick_btn_Send(View v) {

        switch (v.getId()) {
            case R.id.led_2:
                message = "2 led\n";
                break;
            case R.id.led_1:
                message = "1 led\n";
                break;

            case R.id.led_4:
                message = "4 led\n";
                break;
            case R.id.led_3:
                message = "3 led\n";
                break;

            case R.id.led_6:
                message = "6 led\n";
                break;
            case R.id.led_5:
                message = "5 led\n";
                break;

            case R.id.led_8:
                message = "8 led\n";
                break;
            case R.id.led_7:
                message = "7 led\n";
            default:
                return;
        }




        tv_DataSendRecive.append(" " + message);

        new Thread(new Runnable() {
            @Override
            public void run() {

                try {
                    ServerIP = et_ServerIP.getText().toString();
                    ServerPort = Integer.parseInt(et_ServerPort.getText().toString());


                    if (i == 0) {
                        socketAddress = new InetSocketAddress(ServerIP, ServerPort);
                        client = new Socket();
                        try {
                            client.connect(socketAddress);
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }

                        i = 1;
                    }


                    if (client.isConnected()) {
                        // ShowToast( "Client is Connected." );

                        try {
                            outputStream = client.getOutputStream();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                        byte[] bytes = message.getBytes();
                        try {
                            outputStream.write(bytes);
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                        try {
                            outputStream.flush();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                        ///////// outputStream.close();\\\\\\\\\\\\\\\\\\\\\




                    } else {
                        ShowToast("Client is Not Connected.");
                    }


                    ////////////////////  client.close();  \\\\\\\\\\\\\\\\\\\
                } catch (final Exception e) {
                    ShowToast(e.toString());
                }

            }
        }).start();

    }

    public void ShowToast(final String Data) {
        runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(getApplicationContext(), Data, Toast.LENGTH_LONG).show();
            }
        });
    }
}

И это мой класс TCPClient

public class TCPClient {

    public static String SERVER_IP;
    public static int SERVER_PORT;

    private String mServerMessage; // message to send to the server
    private OnMessageReceived mMessageListener = null; // sends message received notifications
    private boolean mRun = false; // while this is true, the server will continue running
    private PrintWriter mBufferOut; // used to send messages
    public static BufferedReader mBufferIn; // used to read messages from the server

    Socket socket;

    public TCPClient(OnMessageReceived listener, String IP, String Port) {
        mMessageListener = listener;
        SERVER_IP = IP;
        SERVER_PORT = Integer.parseInt(Port);
    }

    public void sendMessage(String message) {

        if (socket == null || !socket.isConnected()) {
            Log.e("313", "Socket Not Connected / Init !!!");
            return;
        }

        if (mBufferOut != null && !mBufferOut.checkError()) {
            mBufferOut.println(message);
            mBufferOut.flush();
        }
    }

    public void stopClient() {

        mRun = false; //////////////////////mRun must be false///////////////////////////

        if (mBufferOut != null) {
            mBufferOut.flush();
            mBufferOut.close();
        }

        mMessageListener = null;
        mBufferIn = null;
        mBufferOut = null;
        mServerMessage = null;
    }

    public void run() {

        try {
            // Creates a stream socket and connects it to the specified port number at the specified IP address
            socket = new Socket(InetAddress.getByName(SERVER_IP), SERVER_PORT);

            try {
                // sends the message to the server
                mBufferOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

                // receives the message which the server sends back
                mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                mRun = true;
                while (mRun) { // in this while the client listens for the messages sent by the server
                    mServerMessage = mBufferIn.readLine();
                    if (mServerMessage != null && mMessageListener != null) {
                        mMessageListener.messageReceived(mServerMessage); // call the method messageReceived from MyActivity class


                    }
                }
            } catch (Exception e) {} finally {
                // the socket must be closed.
                // It is not possible to reconnect to this socket, after it is closed,
                // which means a new socket instance has to be created.
                socket.close();
            }

        } catch (Exception e) {}

    }

    public interface OnMessageReceived {
        public void messageReceived(String message) throws IOException;
    }


    public boolean isConnected() {
        if (socket == null) return false;

        if (socket.isConnected()) return true;
        else return false;
    }
}

используйте сторонние библиотеки, Модернизация, залп или ..... Они просты и обеспечивают производительность вашего приложения.

ZarNi Myo Sett Win 10.07.2018 06:53

Я думаю, что OP говорит о программировании сокетов. Общая идея получения сообщения на стороне клиента такая же, как и на стороне сервера. Создайте бесконечный цикл, получите поток и разбейте его на данные по разделителю. Вам не нужно создавать заново с нуля, я уверен, что есть библиотеки, которые могут сделать это за вас, например, leaks.wanari.com/2017/08/29/using-websocket-android.

hjchin 10.07.2018 07:01

Я использую библиотеку Volley, но не знаю, как получить данные с сервера и показать это в своем приложении.

amin 10.07.2018 08:34
0
3
40
0

Другие вопросы по теме