Java ServersocketとSocketsをObjectioStreamsを使用してパケットを失うことはできますか?

StackOverflow https://stackoverflow.com/questions/2719253

質問

私はサーバー上のサーバーソケットと、ObjectioStreamsを使用してネットワーク接続にシリアル化可能なオブジェクトを送信するソケットを使用しています。私は本質的により金融バージョンの独占を開発しているので、送信/受信が必要に応じて送信および確認されるパケットが必要です。自分のパケット損失ウォッチャーを実装する必要がありますか、それとも(サーバー)ソケットですでに世話をしていますか?

私は主に、完全な接続エラーではなく、ネットワークブリップなどでパケットを失うことについて尋ねています。たとえば、兄弟はルーターとコンピューターのWi-Fiアダプターの間にリードプレートを移動します。

http://code.google.com/p/inequity/source/browse/#svn/trunk/src/networkコードは、ネットワーク - > clientControllerとnetwork-> serverの下にあります

役に立ちましたか?

解決

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

ただし、実際には、TCP(トランスミッションコントロールプロトコル)を使用する場合、このようなものはすでに処理されています。パケットを失うことはありません。 (一方、UDPを使用している場合(ユーザーデータグラムプロトコル)これは別のストーリーであり、パケットを失ったり、故障したりしている場合がある場合があります)。

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

同期を解決するための最良の方法は、ネットワークループを非常に小さな読み取り/同期中のキューループに置き、他のスレッドが確信していないと確信しているときはいつでも、キューから受信したパケットをピックアップすることだと思います。介入。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top