0

2 台のマシン間の通信に Java ソケットを使用しています。そのため、サーバーはメッセージを受信すると、それを処理して別のメッセージで返信します。TCP プロトコルを使用しています。

私の質問は、ネットワークが遅いと仮定します。次に、メッセージを送信した直後に、ソケットの InputStream.available() メソッドを呼び出すと、サーバーからソケットに利用可能な実際のバイト数を取得できますか?

また、メッセージが非常に大きい場合でも、 InputStream.available() は常にサーバーから送信されているバイトの完全な数を返しますか? TCP にはパケット制限があると聞きましたが、それは InputStream.available() に影響しますか?

4

2 に答える 2

1

サーバーがデータをストリームに送信してからクライアントがデータを受信するまでには、常に遅延があります。ネットワークの速度によっては、長くなったり短くなったりする場合があります。さらに、メッセージ サイズが TCP パケットの最大サイズよりも大きい場合、メッセージはいくつかの TCP パケットに分割されます。この場合、available() はメッセージ サイズより小さい値を返す場合があります。

于 2013-08-19T04:51:27.123 に答える