TCP问题 - 在读取服务器的响应时挂起

时间:2010-11-14 03:50:09

标签: android tcp tcpclient

我正在尝试编写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上运行的服务器应用程序上。

感谢。

2 个答案:

答案 0 :(得分:1)

String st = input.readLine();此命令是否使程序等待直到读取某些内容,或者只是直接读取缓冲区中的内容。我猜你需要连续检查是否有来自服务器的东西。我的意思是,你需要一个无限循环,类似于 While (True){ st = input.readLine(); 这将检查是否有任何事情发生。如果你不使用它,如果String st = input.readLine();命令不会使程序等待,然后你的代码将结束而不带任何东西。

答案 1 :(得分:0)

您当然需要在清单中获得互联网许可。

如果是我,我会向服务器添加检测,以便它可以告诉您何时有连接,何时该连接已接收数据,以及何时发送回复。或者在服务器上运行tcpdump。

您也可以暂时尝试按字符抓取输入字符,而不是一次抓取整行。

尝试弄清楚“对话”的进展情况,以便了解它真正陷入困境