[英]I/O in JAVA - reading data from java.net.Socket
我的客户端有问题-我用JAVA开发的服务器应用程序。 我使用java.net*
包中的Socket
和ServerSocket
。 当客户端连接到服务器时,客户端发送消息,例如7200字节。 在服务器中,我使用InputStream
。 有时我收到整个消息(7200字节),但是很多时候我收到的消息少于7200字节。 JAVA中有什么方法可以接收整个消息并关闭连接? 也许我应该在JAVA中使用其他库进行tcp / ip连接?
可能会有所帮助: 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;
}
否则,如果您不预先知道消息的长度,则可以选择几种方法。 其中:
我建议从jboss到tcpip通信使用jgroups( http://www.jgroups.org/manual/html/index.html )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.