【发布时间】:2023-04-02 12:27:01
【问题描述】:
我正在尝试为 Android 编写客户端,该客户端应该与本地网络上的 PC 服务器应用程序进行通信。服务器应用程序是我的朋友用 C# 编写的。目前有一个 iPhone 应用程序正在使用这个服务器应用程序,没有任何问题。
我有非常简单的 TCP 客户端代码:
1. Socket s = new Socket(server, port);
2. OutputStream out = s.getOutputStream();
3. PrintWriter output = new PrintWriter(out);
4. output.println("ACTION=Next&VALUE=0&");
5. BufferedReader input = new BufferedReader(new nputStreamReader(s.getInputStream()));
6. String st = input.readLine();
我浏览了很多 TCP 实现示例,它们都很相似。很像我上面的代码。当我尝试从服务器读取响应时,我的应用程序在第 6 行冻结。 它不会导致任何错误(没有异常),调试器中没有任何显示,只是一段时间后出现超时错误。在第 4 行执行我的操作后,服务器应该返回字符串。 我不明白为什么这段代码会挂起。输入不是 NULL(我已经检查过了)。我希望会引发一些异常,或者只是返回空字符串。
所以?我错过了什么?服务器应用程序正在发送的一些特殊字符是否有问题而android无法处理?我的清单是否需要任何特殊许可?
我确信我有正确的 IP 地址和正确的端口号。我可以在我的 PC 上运行的服务器应用程序上看到它。
谢谢。
【问题讨论】:
-
readLine() 是否等待换行符?服务器是否应该发送换行符?
-
谢谢。那是问题之一。作为消息终结者服务器应用程序作者使用
序列。事实证明,问题不止一个。在第 4 行,我不得不用 & 替换所有 & 字符。但这并不是解决办法。似乎 PrintWriter 向 OutputStream 添加了一些东西,可能是 \n 字符或类似的东西。服务器不喜欢这样,我的行为被忽略了。我尝试了 PrintStream 而不是 PrintWriter,效果很好。