[英]Java readline() keeping socket open
我試圖讓客戶端連接到服務器,然后根據命令將一些字符串發送回客戶端。 當前,該應用程序可以連接並且可以很好地將字符串發送到服務器。 但是,當我發送指示服務器將某些內容發送回的命令時,它掛起了。 我發現當客戶端嘗試讀取從服務器發送的行時會發生此問題。
服務器
PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
out.println("GETDATA" + "\n");
out.flush();
out.close();
客戶
BufferedReader fromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
incomingLine = fromServer.readLine();
Log.d("HERE", "NOT " + incomingLine);
fromServer.close();
謝謝!
不要將 PrintWriter
與BufferedReader
一起使用。它們是不兼容的。 通過評論, PrintWriter
實際上隱藏了關鍵異常,因此不應在網絡中使用它們。 而是使用DataInputStream
和DataOutputStream
進行通信。
client = new Socket(hostname, port);
inStr = new DataInputStream(client.getInputStream());
outStr = new DataOutputStream(client.getOutputStream());
然后,使用writeUTF
和readUTF
發送和接收,如下所示:
public void send(String data) throws IOException {
outStr.writeUTF(data); outStr.flush();
}
public String recv() throws IOException {return inStr.readUTF();}
原因與UTF編碼有關; BufferedReader
需要某種字符串編碼,而PrintWriter
則不提供。 因此,讀/寫掛起。
方法readLine()預期行字符“ \\ n”的結尾可能是您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.