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