2012-04-01 14 views
0

私は学習者ですから、気をつけてください。私はJavaソケット(DatagramSocket)でエコークライアントを書いています。UDPソケットと複数の返信

クライアントは、エコーサーバーにメッセージを送信した後、サーバーが故意にUDPでメッセージの重複をシミュレートするために戻ってメッセージの1-10コピーを送信します。

しかし、私のコードは、返送されたそれらのメッセージの最初の、決してサーバーから送信された完全な番号を受け取ることができます。私のコードを受け取り、このようなものです:私はあなたがエコーする文字列を入力することができた状態に私のクライアントを置く

socket.receive(receivePacket); 

どのように、「こんにちは」と言う、それがその後、サーバーに送信されますが、すべて受け取ることができます答えは?私は彼らのすべてが再び追加のパケットを受信するsocket.receive

答えて

3

コール(損失が生じないので、私は私のローカルマシン上でこれをテストしてい)、クライアントにそれを作ることを想定しています。 Set a timeoutは、サーバーがすべてのパケットを送信したと判断する前に妥当な時間待機する必要があります。

+0

こんにちは...私は最初1000msでは、その後、その後、そのソケット経由でメッセージを送信してSocketTimeoutExceptionがあるまでsocket.receive呼び出している間(真)ループ(...)を入力して言うと言うようにソケットのタイムアウトを設定しますスローされます...これは、応答がクライアントに到達できるようにする「最大時間枠」になります。それはうまくいくのですか? – xingyu

+0

はい。最初のメッセージを送信した後にタイムアウトを設定することを検討することがあります。私はおそらく最初の応答(特にあなたがインターネット上でこれをやっている場合)を3-5秒待つことをお勧めし、次に重複を消費するために1秒にタイムアウトを変更します。 – selbie

関連する問題