簡體   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