簡體   English   中英

Java readline()保持套接字打開

[英]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();

謝謝!

當我第一次做套接字時,我實際上也犯同樣的錯誤

不要將PrintWriterBufferedReader一起使用。 它們是不兼容的。 通過評論, PrintWriter實際上隱藏了關鍵異常,因此不應在網絡中使用它們。 而是使用DataInputStreamDataOutputStream進行通信。

client = new Socket(hostname, port);
inStr = new DataInputStream(client.getInputStream());
outStr = new DataOutputStream(client.getOutputStream());

然后,使用writeUTFreadUTF發送和接收,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM