2011-02-03 17 views
2

同じパケットを複数の宛先に送信するソフトウェアを開発する必要があります。 しかし、私はマルチキャスト方式を使用してはいけません。 私は同じパケットと複数のIPアドレス(クライアント)を持っており、マルチキャストを使用することはできません どうすればいいですか? 言語としてはC++、プラットフォームとしてはLinuxを使用する必要があります。 あなたの上司は、あなたがマルチキャストを使用できないと述べている場合ので、多分、彼/彼女は彼/彼女の理由があり、複数のクライアントに同じパケットを送信する

ありがとう

+6

あなたの上司が愚かな人であるかどうかわかりませんが...彼はあなたの上司であり、これは公共の場所です。私は彼を侮辱することが質問に多くをもたらすとは確信していません。彼は多分マルチキャストの使用を拒否する理由を持っています。 – ereOn

答えて

0

私を助けてください。私は放送があまりにもゲームから外れていると思いますか?

これらが必要な場合は、パケットを送信するすべてのリモートホストとのTCP接続を確立するだけです。あなたのアプリケーションは、あなたがそれは私がTCPを指定された理由だ、の設定のために担当しているLAN経由で実行する場合

EDIT
UDP、逆に、マルチキャストを超える多くの利点を提供しないであろう。

あなたのシナリオを少し詳しく説明しなければならないかもしれません。

+0

「UDPはマルチキャストよりも利点がありません」というあなたの声明に強く反対します。実際には、IPv4パケットはほとんどのルータによってブロックされますが、UDPパケットはブロックされません。 – ereOn

+0

はい、回答を更新します。 – Simone

0

着信Tcpクライアント接続(ソケット)をリッスンする特定のポートで動作しているサーバー上に、TCP Listernerを作成する必要があります。

クライアントが接続するたびに、名前値のペアのような何らかの種類のデータ構造でキャッシュする必要があります(名前はクライアントのネットワークストリームであるクライアントの一意の名前です。 TCPソケット)。

最後にデータを送信する準備ができたら、この名前値ペア接続のコレクションを繰り返して、バイト配列としてデータを各クライアントに送信するか、接続されたクライアントごとに1つのスレッドを作成してデータを同時に送信します。

TCPは接続性に富んだプロトコルであり、大きなデータ(動画/画像など)の送信はかなり遅くなる可能性があります。

大量のデータパケットをストリーミングするには、間違いなくUDPが選択されますが、配達保証人とのトレードオフが必要です。

0

これは、信頼性要件に応じて、TCPまたはUDPのいずれかで行うことができます。失われたパケットや並べ替えられたパケットは許されますか?タイムアウトと再送信を処理する準備ができていますか?両方の回答が「はい」の場合は、UDPを選択します。それ以外の場合は、TCPに留まります。次に:

  • TCPの場合。単一のマルチキャストUDPソケットの代わりに、1つの宛先ごとに1つずつ、いくつかのTCPソケットがあります。あなたは接続確立のための最良の体系を理解しなければならないでしょう。定期的なリスニングと接続クライアントの受け入れは、いつものように動作します。次に、接続されたソケットを繰り返し処理し、それぞれにデータを送信します。
  • UDPの場合。これは、サーバー側の単一のUDPソケットで行うことができます。クライアント(データ受信者)のIPとポートが各アドレス/ポートに対して同じデータでsendto(2)を使用していることがわかっている場合。その時点でクライアントはrecv(2)である必要があります。あなたのクライアントを前もって知らない場合は、クライアントのためのスキームをに要求するか、のデータを要求するか、をサーバに登録する必要があります。それはrecvfrom(2)が役に立ちます - それはあなたにクライアントのアドレスを与えます。
0

マルチキャストには「いいえ」と言って制限しています。私は、複数のクライアントにパケットを送信することはあなたの要求の一部に過ぎないと思います。あなたがより多くの光を投げなければ、完全な解決策を提供することは難しいでしょう。

クライアントとサーバーの双方向の通信が必要ですか?その場合、マルチキャストの選択は複雑になる可能性があります。明確化してください。

クライアントを順番に処理し、パケットを次々に送信する必要があります。クライアントからの応答が返ってくることを期待している場合は、セッションを維持することができます。

UDPまたはTCPの選択は、送信するデータの性質によって異なります。 UDPでは、シーケンス外のパケットを処理する必要があり、また再送を実装する必要があります。

関連する問題