1

サーバーで ServerSocket を使用しており、ObjectIOStreams を使用してネットワーク接続を介してシリアル化可能なオブジェクトを送信するソケットを使用しています。私は独占の本質的により経済的なバージョンを開発しているため、パケットの送信と送受信の確認が必要です。独自のパケット損失ウォッチャーを実装する必要がありますか、それとも (Server)Sockets で既に処理されていますか?

私は主に、完全な接続エラーではなく、ネットワークブリップ中のパケットの損失について質問しています。たとえば、兄弟は私のルーターとコンピューターの Wi-Fi アダプターの間で鉛板を動かします。

http://code.google.com/p/inequity/source/browse/#svn/trunk/src/network コードは network->ClientController および network->Server の下にあります

4

1 に答える 1

4

理論的には。はい。ハードウェア層で送信されたものが受信側で同じように受信されるという 100% の理論的保証を与える方法はありません。

ただし、実際には、TCP (Transmission Control Protocol) を使用している場合、このようなことは既に処理されています。パケットを失うことはありません。(一方、UDP (ユーザー データグラム プロトコル) を使用している場合は別の話であり、パケットを紛失したり、順不同で受信したりする可能性が非常に高くなります)。

コードを簡単に見ただけで、複数のスレッドを使用しているようです。その場合、同期には十分注意する必要があります。パケットがドロップされたように見える場合もありますが、プログラム内の競合状態のために処理されません。(たとえば、GUI は独自のスレッドで実行されることに注意してください。)

同期を解決する最善の方法は、ネットワーク ループを非常に小さな read/put-on-synchronized-queue ループに入れ、他のスレッドがそうしないことが確実なときはいつでもキューから受信パケットを取得することだと思います。介入します。

于 2010-04-27T06:55:42.447 に答える