Android套接字客户端readUTF无法正常工作

时间:2016-03-11 06:23:51

标签: java android sockets stream

我是Java套接字编程的新手,我正在PC端的Android客户端和Java服务器之间进行基本的套接字通信。服务器可以从客户端接收消息,但客户端似乎无法从服务器读取消息。我一直在想为什么会这样。

服务器:

while(true){
   try {
    socket = serverSocket.accept();

    dataInputStream = new DataInputStream(socket.getInputStream());
    System.out.println("ip: " + socket.getInetAddress());
    System.out.println("message: " + dataInputStream.readUTF());

    dataOutputStream = new DataOutputStream(socket.getOutputStream());
    dataOutputStream.writeUTF("Hello Client !!!!!!" + "\n");
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
...
...

   if (socket != null){
    try{
        socket.close();
        socket = null;
    }
    catch(Exception e){
        e.printStackTrace();
    }
}
}

客户端:

socket = new Socket(serverIP, 8080);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF(textOut.getText().toString());

dataInputStream = new DataInputStream(socket.getInputStream());
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        try {
            Log.i(TAG, dataInputStream.readUTF());
            textIn.setText(dataInputStream.readUTF());
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    });

在服务器端,一切正常,但Android客户端无法接收数据。 readUTF不返回任何内容(也在logcat中返回W / System.err)

解决方案:

我最终通过将dataInputStream.readUTF()移出runOnUIThread部分来解决问题。例如。在runOnUiThread之前将其存储在临时字符串中。我想这应该是一个noob错误。

连续调用readUTF()绝对是愚蠢的。

1 个答案:

答案 0 :(得分:0)

  

Android客户端无法接收数据

您的客户端尝试读取两条消息,但只发送一条消息。

此外,您的服务器永远不会关闭连接。

相关问题