我正在編程一個服務器(Java) - 客戶端(Android/Java)應用程序。該服務器是一個W7。所有的溝通都進行得很順利,直到客戶端讀取數據時才凍結並停止讀取數據,直到我發送數據2次。Java套接字不讀取數據
未讀取的數據是一個字節數組。我重複一遍,直到這一點,所有的溝通都順利進行。
下面是我用於發送數據的代碼:
Long lLength = new Long(length);
byte [] bLength = this.longToBytes(lLength.longValue());
dos.write(bLength);
dos.flush();
dos.write(bLength);
dos.flush();
dos.write(bLength);
dos.flush();
該代碼轉換長值轉換成8個字節數組。正如我所說的,當第一次寫入被執行(並且客戶端正在等待數據)時,讀取沒有完成。直到我執行最後一次寫入()時才完成。
而這裏的代碼來閱讀:
byte length[] = {0,0,0,0,0,0,0,0};
dis.read(length);
我使用Wireshark的嗅探流量,我可以看到字節數組發送,並以ACK客戶端的答案,但閱讀沒有完成。
Here我已經上傳了我用wireshark完成的捕獲。只有協議數據。
在客戶端和服務器,插座都設置這樣的:
socket = new Socket(sIP, oiPort.intValue());
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
這是推動我瘋了...我不知道爲什麼,在某一時刻,應用程序停止讀取數據,當我以同樣的方式發送它。
我想,這個問題可能在客戶端套接字的輸入緩衝器...但我不知道該怎麼做或什麼嘗試...
說,我也考服務器在WXPSP3,它仍然無法正常工作。
非常感謝,
Newlog。
你好,斯蒂芬。我已經檢查了你所說的。使用Wireshark,我可以看到8個字節被髮送。我不使用writeLong,因爲在寫入時,客戶端沒有讀取數據。 (起初它是一個writeLong)。 – newlog