我的問題類似於這篇文章。但是我不會發送數據包長度而不是最後一個0字節。 Most efficient way to read in a tcp stream in Java如何讀取java流,直到達到某個字節
所以我想知道如何編碼的東西,會。
目前,我只是用
this.socketIn = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
String line = this.socketIn.readLine();
如果包是越來越發送,而你是垃圾郵件的包它要算這還沒到作爲一個完全讀行的數據包,但它是不完整的,弄亂了整個協議。
在我的協議中,如果數據包最終合併/堆疊在一起,每個數據包都以0字節(0x00)結尾,以確定單個數據包的結束。
所以我試圖做的確實是不斷讀取套接字流,直到達到0x00來指示數據包已完全製作並準備好處理..當然還有某種安全性(超時最好是我相信)來確定數據包是垃圾郵件,因爲它沒有在特定時間幀的0字節中結束,比如說5秒。
我該怎麼做呢?
PS> 我沒有使用NIO框架,而是每個連接套接字只有一個常規線程,我不想切換到NIO,因爲使用完全不同的全局線程處理更新併發送數據非常困難隨機用戶的特定更新(不廣播)。
這是我到目前爲止所嘗試的。
String line = "";
int read;
long timeOut = System.currentTimeMillis();
while(true) {
read = this.socketIn.read();
if (read == -1 || read == 0 || (System.currentTimeMillis()-timeOut) > 5000)
break;
line += read
}
到目前爲止您嘗試過什麼問題?順便說一句,使用Socket.setSoTimeout(),不要發展自己的。 – EJP 2010-08-16 23:58:53
哈哈謝謝EJP我不知道tmeout命令存在。 – SSpoke 2010-08-17 00:37:46