java网络编程,分包接收数据的疑惑,望大侠指点!
ztenv 博客专家认证 2012-12-19 10:54:35 最近在做java接收二进制流的测试,一个服务端一个客户,服务端接收到客户端的请求后,向客户端一次性发送50kB左右的二进制数据包;包头占四个字节,指示了数据包的长度;
客户端收到四个字节的包头后,打印包体的长度length,正确,
于是分配50kb的buff,byte[] buff=new byte[length];
int canread=socket.avaliable();
//canread的大小也是正常的;
int readlen=socket.getinputstream().read(buff,0,length);
//readlen的长度为length的大小,按API的说法是读到了length个字节,但缓冲区中却没有那么多数据;
//如果readlen不可靠,那么如何才能获得可靠的接收到的数据?
//因为50kb不可能在一个TCP包中传过来,肯定分成多包来传的,我想知道我具体已经接收了多少了,给我的感觉是socket.getinputstream().read()的返回值是不可靠的;
感谢大侠的指点!