我的客户端问题 - 我在JAVA中开发的服务器应用程序。我使用Socket
包中的ServerSocket
和java.net*
。当客户端连接到服务器时,客户端发送消息,例如7200字节。在服务器中,我使用InputStream
。有时我会收到整条消息(7200字节),但很多时候我收到的信息少于7200字节。在JAVA中有什么方法可以接收整个消息并关闭连接吗?也许我应该在JAVA中使用其他库来连接tcp / ip?
答案 0 :(得分:2)
这可能会有所帮助:InputStream.read()文档。
从输入流中读取一些个字节,并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。
在整个字节缓冲区填满或流结束之前,此方法不会阻塞。相反,它会返回尽可能多的数据。
从文件读取时不太可能发生这种情况,但对套接字来说非常正常。
返回写入字节缓冲区的实际字节数,因此您可以决定是否有足够的数据。
您可以使用read(buf,start,len),不是从缓冲区的开头开始,而是继续数据块。例如,如果您正在读取完全 7200字节,请执行:
byte [] buf = new byte[7200];
int len = 7200;
int pos=0;
while(len > 0) {
int rd = is.read(buf, pos, len);
if(rd<0) {
//premature EOF
break;
}
pos += rd;
len -= rd;
}
否则如果你事先不知道消息长度,你有几个选择。其中:
答案 1 :(得分:0)
我建议从jboss到tcpip通信的jgroups(http://www.jgroups.org/manual/html/index.html)