2011-02-13 9 views
0

Javaで学習目的でマルチスレッドデータグラムソケットを作成する際に問題があります。UDP + javaを使用したマルチスレッドアプリケーション

私はテスト目的のために同じIP "localhost"と通信のための異なるポートを持っている2つのスレッドSendとRecieveを生成するServerクラスを持っています。

もう一方の端私は送信ポートから接続データを受信し、サーバーの受信ポートを通じて別のパケットを要求するクライアントクラスを持っています。

私が持っている問題は、私はそれらの両方を実行すると、サーバーがデータを送信し、クライアントはそれが、反対の方向をrecievesことです....

だから、誰が問題になる可能性があるのか​​分かりません...

SendServer SendThread = new SendServer(); 
SendThread.run(); 
RecieveServer RecieveThread = new RecieveServer(); 
RecieveThread.run(); 
- :.How私は

は、ここでは、コード2つのスレッドを産卵

の一部だ....それが実行されるかを確認するために、同じマシン上のクライアントとサーバの間の相互通信プロセスを実行することができます送信スレッドで

は私がローカルホストとPORTNOでのDatagramPacketを宣言し、同様に私は、私は2つのポートを備えた2つのソケットを作成し、送信するための1つを使用してクライアント側でいくつかの他のポート番号

とレシーブスレッドのためにそれを行いますその他受信するためのその他の機能があります。

このプログラムのエラーは何ですか...スレッドを1つずつ実行すると、サーバー側で受信できなくなるのですか?

サーバとクライアントが同じマシン上で実行しようとしている場合、それらは異なるポート番号をリッスンする必要があります。..

答えて

0

を助けてください。 1つのポート番号を使用するクライアントとサーバーの両方の受信者と、別のポート番号を使用するクライアントとサーバーの両方の送信者を持つようになりました。そのペアリングは間違っています。サーバーの送信者と受信者が1つのポート番号を使用し、クライアントの送信者と受信者が異なるポート番号を使用するようにします。

これはマルチスレッドなので、サーバーからのすべての応答が同じポート宛であるという問題が発生している可能性があります。これは、パケットを読み込んで、どのスレッドに行くのかを区別できるシリアル化されたソケットリーダーを持っていなければならないことを意味します。さもなければ、同じポートでリッスンしているソケットを持つことは、あるソケットが他のスレッドのソケット用のものである行からパケットを読み取ることを可能にします。

+0

いいえ@unholysamplerそれが混乱していると思われる場合は申し訳ありませんが、私は送信サーバーとクライアントの受信に同じペアリングを使用しています。逆の場合も同様です... –

+0

@ user506710:まだ不明瞭なので、各ソケットに使用している実際のポート番号。また、私はマルチスレッドと同じポート番号の使用について議論するために私の答えを編集しました。 – unholysampler

関連する問題