2012-01-08 17 views
0

私のプロジェクトはUDPファイル転送です。マルチクライアント用のJava UDPファイル転送、同じアドレスをバインドできません。

の流れがあることである:

  1. サーバはUDPパケットを介してクライアントに
  2. サーバー、送信ファイルのバイトクライアントの要求を受け取る
  3. ループ1-2新しいクライアントが接続(スレッド)

1つのクライアント用に1つのソケットを作成する必要がありますか? localhostでテストして複数のソケットを作成すると、例外が発生します(アドレスは既に使用されています)

どのようにそのアプリケーションを実装できますか?何か案が ?または私のコンセプトが正しくない?

+0

内部ネットワーク上でファイルを転送している場合や、独自の確認メカニズムを実装している場合を除き、UDPデータ転送はお勧めしません。インターネットには、パケット損失、並べ替えなど、さまざまな問題があります。 –

+0

いいえ、すべての着信udp要求を処理するサーバー側ソケットを1つ作成します。 UDPには「接続」はありません。どこからでも入ることができるパケットだけがあります。 –

+1

@Chris:並べ替えが問題だった場合は、とにかくTCPを使用しています。 udpは、多くの用途で完全に有効なプロトコルです。 –

答えて

0

特定のUDPポートに一度に1つのソケットしかバインドできません。

bind()を呼び出す複数のスレッドがあり、最初のスレッド以外のすべてのスレッドが「既に使用中」のエラーを返すように思えるかもしれません。ワーカースレッドを生成する前に、最初はbind()を一度呼び出す必要があります。

受信メッセージを処理するために複数のスレッドが必要な場合は、単一のディスパッチャスレッドでソケットをリッスンし、メッセージをワーカースレッドに送信する必要があります。

送信メッセージを送信するために複数のスレッドが必要な場合は、すべて同じ記述子を使用できます。

この機能を実行するために複数のプロセスが必要な場合は、別々のポート番号を使用する必要があります。

関連する問題