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