[英]Read all bytes from socket Stops at 52964 bytes
我正在制作一个能够获得64 kb大小的软件包的服务器。
int length = 65536;
byte[] bytes = new byte[length];
int pos = 0;
while(pos < length -1)
{
System.out.println("Before read");
pos += dis.read(bytes, pos, length-pos);
System.out.println(""+pos+" >> "+ length);
}
这是我用来从套接字读取所有字节的代码。 Dis
是一个InputStream
。 当我运行代码1时n出错了。 该代码仅接收52964字节而不是65536
字节。
我还检查了C代码,它说它发送65536
字节。
有人知道我做错了什么吗?
这是另一种情况, Jakarta Commons IOUtils比自己编写更好的选择。 它是一行代码,经过全面测试。 在这种情况下,我推荐IOUtils.readFully()
。
如果它没有读取整个缓冲区,那么您就知道您没有发送所有内容。 也许你错过了服务器端的同花顺。
InputStream.read()
返回读取的字节数,如果已到达流的末尾,则返回-1。 您需要检查该错误情况。 另外,我怀疑你的while(..)
循环是个问题。 你为什么称它为pos
位置? 你可能会过早地终止。 此外,确保您的C代码正常发送,无论它在做什么。 您可以使用Wireshark等工具检查网络流量。
你是什么意思“出问题”? 什么是输出? 它在读取完整的64 KB之前无法退出循环,那么究竟发生了什么?
此外,在假设I / O成功之前,最好分别保存I / O调用的返回值并检查它。 如果是DataInputStream.read()
,则在出错时返回-1。
您的代码不正确,因为它不检查-1。
这是使用DataInputStream.readFully()而不是自己编码并弄错的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.