【问题标题】:Android socket client readUTF not workingAndroid套接字客户端readUTF不起作用
【发布时间】:2016-03-11 06:23:50
【问题描述】:

我是 Java 套接字编程的新手,我正在 Android 客户端和 PC 端的 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 之前将其存储在临时字符串中。我想这应该是一个菜鸟的错误。

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

【问题讨论】:

  • 它仍然是。问题不在于它被调用的地方。问题是你调用了两次。我已经告诉过你了。
  • 对不起,先生,我缺乏理解。但是你能告诉我我的代码的哪一部分调用了 readUTF 两次吗?抱歉,我之前对网络一无所知。
  • 您连续两次调用readUTF()。你一定能看到吗?一次是您记录它的地方,另一个是您将其放入文本字​​段的地方。
  • 啊,我知道我后来实际上删除了那行。但是,我尝试在 runOnUIThread 中只调用一次 readUTF,仍然无法正常工作。但是一旦我像我说的那样把它移出来,它现在可以正常工作了。我想这意味着在 runOnUiThread 中调用套接字函数是不明智的。

标签: java android sockets stream


【解决方案1】:

Android 客户端无法接收数据

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

而且你的服务器永远不会关闭连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2017-11-10
    • 2017-04-14
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多