我正在嘗試爲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