服务器套接字不读取 esp8266,为什么?

server socket not reading esp8266, why?

我对 Androidesp8266 之间的简单套接字的概念验证只完成了 50%。 我从 Android 发送一条消息到 esp8266,它被正常接收,但是从 esp8266 到 android 不是,并且在 android 端有 java.io.EOFExceptionTimeout(如下面的代码所示)用于 esp8266 端。 我提供代码的相关部分是简短的,如果需要我会 post all.

Android:

                while (true) {
                socket = serverSocket.accept();
                dataInputStream = new DataInputStream(
                        socket.getInputStream());
                dataOutputStream = new DataOutputStream(
                        socket.getOutputStream());

                String msgReply = "Android server is alive!";
                dataOutputStream.writeUTF(msgReply);
                dataOutputStream.flush();

                message = dataInputStream.readUTF();
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        msg.setText(message);
                    }
                });
            }

ESP8266端:

String cmd = "Hello from NodeMCU";  
Serial.print("send to server: ");
Serial.println(cmd);
client.print(cmd);
client.flush();
unsigned long timeout = millis();
  while (client.available() == 0) {
      if (millis() - timeout > 5000) {
        Serial.println(">>> Client Timeout !");
        client.stop();
        return;
      }
  }

    while(client.available()){
    String line = client.readStringUntil('!');
    Serial.print(line);
   }

我已经尝试了我想到的任何方法,切换到使用 client.write('h') 编写 char 等等,但没有任何效果。 请指出一些工作方向。

dataOutputStream.writeUTF(msgReply);

message = dataInputStream.readUTF();

不使用 UTF 函数。

最好使用普通的 write() 和 read();

此外,您可以更好地编写阅读行。 (“\n”作为 line/message 结束。不是“!”)。

在 Android 方面,您可以使用 writeLine() 和 readLine() 函数,这让生活变得更加轻松。

进一步:服务器先发送消息,然后尝试读取答案。但客户端也先发送消息,然后尝试读取答案。那永远行不通。你应该决定哪一个先发消息。

您必须或者在两端使用readUTF()writeUTF()或者根本不使用它们:使用 read()write(),或 readLine()println(),等等。你不能像这样混淆它们。