1

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

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

当我在本地测试它时它工作正常(超过 127.0.0.1)。但是当我把它放在互联网上并连接到它时,它只能读取 2916 个字节。我怎样才能准确地读取“num”个字节而不继续,我收到它们?

4

2 回答 2

2

听起来与您的网络设置方式有关。其他东西可能正在向它发送数据。您是否尝试过使用不同的端口?

如果这不起作用,请尝试禁用您的网络连接/断开与您的网络的连接,看看它是否来自外部的东西实际上是导致问题的原因。

于 2012-06-26T21:28:56.660 回答
2

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

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

因此,如果您想接收 excatlynum字节,则必须read再次调用。当然参数len越来越小off

例子:

    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;
    }
于 2012-06-27T10:01:24.437 回答