我试图用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。所以如果可用()计数为零,我不会读取数据,因为我不知道需要读取的字节大小。 –
我按照注释编辑了问题 –