簡體   English   中英

TCP 套接字:為什么 BufferedReader.readLine() 為 NULL?

[英]TCP socket: Why BufferedReader.readLine() get NULL?

我有一個經典的 Java 客戶端/服務器應用程序,其中客戶端和服務器通過 TCP 連接交換消息。

當一個元素,我們稱之為 Receiver(無論是客戶端還是服務器),必須接收一條消息時,它會監聽並等待來自另一個元素的消息,我們稱之為 Sender。 接收者通過以下代碼實現它:

BufferedReader myBufferedReader = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
receivedMessageCompleto = myBufferedReader.readLine();

一段時間后,發件人將發送一條實現以下代碼的文本消息:

String messageCompleto = "whatever text";
String packetSend = messageCompleto + '\n' ;  
DataOutputStream myDataOutputStream = new DataOutputStream(mySocket.getOutputStream());
myDataOutputStream.writeBytes(packetSend ); 

問題是:在某些情況下,“myBufferedReader.readLine()”得到空值,但我很確定發件人沒有發送消息 NULL。 問題是:為什么?

根據我的理解,接收器應該保持阻塞,直到它接收到一些東西(讓我們考慮超時設置為無限),然后“myBufferedReader.readLine()”應該只在有東西到達時返回一個值。 關鍵是我確定發件人沒有發送空消息。

任何的想法???

預先非常感謝您 Fausto

public String readLine()
                throws IOException

讀取一行文本。 一行被視為以換行符 ('\\n')、回車符 ('\\r') 或回車符后緊跟換行符中的任何一個結束。

返回:

包含行內容的字符串,不包括任何行終止字符,如果已到達流的末尾,則為 null

基本上,如果底層流達到 EOF,您將獲得null

正如readLine 方法文檔中所說:

返回:包含行內容的字符串,不包括任何行終止字符,如果已到達流的末尾,則返回 null

因此,在您的情況下,已達到流結束。 可能是套接字的遠程端已關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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