【问题标题】:Socket does not receive any data套接字不接收任何数据
【发布时间】:2016-03-24 15:58:54
【问题描述】:

我在 Android Studio 中有一个 C# 服务器和这个 Java 客户端:

@Override
    public void run() {

        try {
            Socket socket = new Socket("192.168.0.107", 7778);
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            while (true) {
                currentMessage = inFromServer.readLine();
                System.out.println(currentMessage);

                Thread.sleep(200);
            }
        }
        catch(Exception e) {
            System.out.print("Error: " + e.toString() + "\n");
        }
    }

我已经使用 Telnet 测试了服务器,并且消息按应有的方式发出,所以我几乎可以肯定,客户端代码中的某个地方存在问题。 我也尝试过使用 DataInputStream 而不是 BufferedReader,但它给了我相同的结果。我也没有任何例外。

我的 AndroidManifest.xml 中有这些权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

【问题讨论】:

  • 你的安卓代码没有收到任何消息??
  • “它给了我相同的结果” - 结果是什么?
  • 服务器是否在消息末尾添加了新行(\n)?

标签: java android android-studio network-programming


【解决方案1】:

readLine() 阻塞,直到在底层缓冲区中接收到整行(以\r\n\n 结尾)(或已到达steam 末尾)。因此,除非您的服务器使用换行符终止数据,否则您的程序将不会打印任何内容。当然,除了套接字超时时的异常。

【讨论】:

  • 谢谢!现在它完美运行,从来没有想过。
  • 修改服务器发送的内容通常是错误的做法。您也可以从套接字读取而无需等待换行符。
猜你喜欢
  • 2020-09-24
  • 2012-04-23
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多