1

接続ハンドシェイクが完了した後、イメージ データをサーバー ソケットにプッシュするクライアント ソケットがあります。サーバーソケットは何も応答せずにそれらを処理します

数分間はうまく機能します。しかし、しばらくすると、サーバーソケットはそれらのデータの取得を停止します。理由がわかりませんでしたか?クライアントがデータをプッシュし続ける場合、サーバーが何かを言わなければならない場合、会話が停止するなど、TCPにそのようなものはありますか?

私は何年も前にこのコードを書きました。それを機能させるために、サーバーが文字列「ACK」応答を返すようにしました。ただし、それを任意の文字列に変更すると機能します。

しかし今、プログラムを再構築する理由を理解したいと思っています。

4

1 に答える 1

0

TCPとの「一方向」通信は、送信側の受信者からの確認応答が必要でない限り、まったく問題ありません。しかし、それはアプリケーションレベルのプロトコルです。トランスポートレベルでも、パケットは双方向に流れます。TCPはシーケンス番号を両方向に保持し、反対側に確認します。これにより、ドロップ/重複パケットの検出と再送信が可能になり、ストリームの信頼性が向上します。接続ハンドシェイク中にネゴシエートされ、会話の存続期間中に更新されるウィンドウサイズにより、TCPは、低速の受信者を圧倒する高速の送信者の速度を低下させることができます。

本当に必要なことは、tcpdump(1)またはwiresharkのようなスニファを使用してTCP接続を記録し、「ソケットがそれらのデータの取得を停止した」時点でワイヤ上で何が起こっているかを調べることです。

于 2012-06-12T15:55:59.813 に答える