我有一个 Java 套接字(java.net.ServerSocket
)。我使用InputStream
.
当它们可用时,我想从套接字读取几个字节。所以我用InputStream.read(bytes, 0, num)
.
当我在本地测试它时它工作正常(超过 127.0.0.1)。但是当我把它放在互联网上并连接到它时,它只能读取 2916 个字节。我怎样才能准确地读取“num”个字节而不继续,我收到它们?
听起来与您的网络设置方式有关。其他东西可能正在向它发送数据。您是否尝试过使用不同的端口?
如果这不起作用,请尝试禁用您的网络连接/断开与您的网络的连接,看看它是否来自外部的东西实际上是导致问题的原因。
这就是套接字读数通常的工作方式。当使用比环回慢的“网络”时,所有数据都不会立即传输。
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;
}