繁体   English   中英

从套接字停止读取52964字节的所有字节

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM