2014-12-07 64 views
0

我有一個在Java中的TCP服務器應用程序。當客戶端連接時,它會嘗試從連接中讀取數據包。但是,即使客戶端沒有發送任何內容,它也會讀取。我得到的是由0初始化的字節數。我期望套接字等待,並最終超時,直到有數據到達。但是,相反,它表現得很奇怪。
這是怎麼回事,我該如何解決它?
以下是我從套接字讀取:爪哇套接字行爲奇怪

byte bytes[] = new byte[25]; 
socket.getInputStream().read(commandBytes); 
+0

我們可以看到代碼嗎? – Dima 2014-12-07 15:22:23

+0

當然。看我的帖子。 – Pavol 2014-12-07 15:34:16

回答

-1

.read返回讀取的字節數。您需要在使用緩衝區之前檢查它。你的情況,這是大概,-1,這意味着,客戶端未發送任何數據

+0

-1的返回值意味着對等關閉了連接。 – EJP 2014-12-07 15:45:53

+0

是的,確切地說。關閉連接而不發送任何數據。 – Dima 2014-12-07 15:46:45

-1

我得到的是阿雷由0

初始化的字節你得到的是一個回報來自read()方法的值,告訴您讀取了多少個字節,或者-1表示流的結束,即對等關閉了連接。由於你忽略了這個值,你的代碼是不正確的。

我希望套接字等待,並最終超時,直到有一些數據來。

由於您沒有設置超時,所以不會超時:它會阻塞,直到數據到達或流結束髮生。

但是,相反,它表現得很奇怪。

沒有什麼奇怪的,除了你的期望。