我試圖用inputStream.available()
連續讀取tcp套接字上的數據字節計數。如果它返回的值大於0,則使用inputStream.read(byte[inputstream.available()] b)
從TCP讀取數據。但如果我們用[PSH,ACK](在Wireshark中)接收到數據,它只會返回計數。當只有數據[ACK](在wireshark中)時,它每次都返回0,直到沒有收到帶有[PSH,ACK]的數據。它僅在服務器需要發送大量數據時纔會發生(不瞭解服務器實現)。延遲讀取TCP套接字數據
這裏是代碼片段:
while(inputStream.available()>0){
byte [] bytesFromServer=new byte[inputStream.available()]
inputStream.read(bytesFromServer);
}
的問題是: - 1.我可以讀出的數據,而不用擔心[PSH,ACK]或數據[ACK]標記。 2.爲什麼數據需要從服務器獲取[PSH,ACK]標誌。
我認爲,inputStream.available()將讀取TCP套接字,並重新提供可用於讀取的套接字上的字節數。在這裏,我試圖連續讀取可用字節數,使用此方法是數據/或字節數大於0,而不是我試圖使用read()或read(byte [inputstream.available()]讀取數據)。 –
我是TCP網絡的新手。我的觀察是,只有在java中有[PSH,ACK]的數據纔來到套接字.available方法將返回計數,否則它只返回0。所以如果可用()計數爲零,我不會讀取數據,因爲我不知道需要讀取的字節大小。 –
我按照註釋編輯了問題 –