繁体   English   中英

从Java中的套接字读取字节

[英]Read bytes from socket in Java

我有一个Java套接字( java.net.ServerSocket )。 我使用InputStream读取它。

我想从套接字读取几个字节,当它们可用时。 所以我使用InputStream.read(bytes, 0, num)

我在本地测试它(127.0.0.1以上)时工作正常。 但是,当我把它放在互联网上并连接到它时,它只读取2916字节。 如何准确读取“num”字节并且不继续,我收到它们?

听起来与您的网络设置方式有关。 还有其他东西可以向它发送数据。 您尝试过使用其他端口吗?

如果这不起作用,请尝试禁用网络连接/断开与网络的连接,以查看外部是否存在实际导致问题的内容。

这就是套接字读数通常如何工作的方式。 使用较慢的“网络”而不是环回时,不会立即传输所有数据。

当有可用数据时read(bytes, 0, num)将返回。 可能有一个或多个字节,甚至超过可用的num个字节。 num仅限制将数据移动到bytes数组的数量。

因此,如果您想要接收令人兴奋的num字节,那么您必须再次调用read 具有较小len和较大off参数的cource。

例:

    int offset = 0;
    int wanted = buffer.length;

    while( wanted > 0 )
    {
        final int len = istream.read( buffer, offset, wanted );     
        if( len == -1 )
        {
            throw new java.io.EOFException( "Connection closed gracefully by peer" );
        }
        wanted -= len;
        offset += len;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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