1

私はあらゆる種類のネットワークプログラミングに不慣れです。以下についてお答えいただけますでしょうか。

私はJavaを使用しています。

シナリオ

スレッド 1:

Socket s = new Socket("remote machine", portNum);
//get the outputstream and write **"Message 1"**, close it.

スレッド 2:

Socket s = new Socket("remote machine", portNum);    
//get the outputstream and write **"Message 2"**, close it.

スレッド 1 がソケットを開き、スレッド 2 がリアルタイムで行う前にリモート マシンにメッセージを送信することは確実です。

「リモートマシン」が同じ順序でそれらを読み取ることが保証されていますか、つまり、メッセージ1を読み取り、次にメッセージ2を読み取ります

: スレッド 1 がメッセージ 1 を送信した後、スレッド 2 に続行するための承認を送信するため、順序は保証されます。

4

1 に答える 1

2

ネットワークを何かとして想像してみてください

a) 非同期 b) 信頼できない c) 制御不能

そのため、何かを送信すると、制御不能な状況下で物事が並行して発生します。リモート マシンに何かを送信する場合、データ (初期データとデータ - TCP を参照) が同じパスを介して送信されることさえ保証されません。

TCP は、1 つの接続のシーケンシャル転送を適切に管理しますが、2 つの接続の場合はそうではありません。同じサーバー/ポートに2つ使用する/必要な場合は、通常、それらを独立させたいため、これを行います。Java でプログラミングしている場合は、配信順序を保証するために単一の tcp-socket-connection で同期/ディスパッチを試み、複数を使用して並行して実行します。

于 2012-10-25T17:37:30.367 に答える