我正在尝试为Android编写客户端,它应该与本地网络上的PC服务器应用程序进行通信。服务器应用程序由我的朋友在C#中编写。目前有一款iPhone应用程序正在使用此服务器应用程序,没有任何问题。TCP问题 - 在读取服务器响应时挂起
我有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()是否等待换行符?服务器应该发送换行符吗? – Slartibartfast 2010-11-14 06:56:27
谢谢。这是问题之一。作为一个消息终结者服务器应用程序作者使用序列。结果出现了更多的问题。在第4行中,我必须用&替换所有的&字符,但那不是解决方案。看来,PrintWriter增加了一些OutputStream,可能\ n字符或类似的东西。服务器不喜欢,我的行为被忽略。我尝试了PrintStream而不是PrintWriter,并且完美地工作。 –
bobetko
2010-11-15 05:46:27