0

同じ LAN 上の 2 台のコンピューター間で通信する必要がある小さなプログラムがあります。私はネットワーキングにはかなり慣れていませんが、読んだ限りでは、2 台のコンピューターがお互いを検出できるように UDP マルチキャストが必要なようです。その後、実際のデータ通信用の TCP 接続を確立できます。私が従うことができるUDPマルチキャストのこの小さな例を見つけました。HELLO_GROUPただし、マルチキャスト グループ (その例では)について疑問に思ってい225.0.0.37ます。

使用するグループを知るにはどうすればよいですか? このプログラムはさまざまなネットワークで実行されるため、ハードコーディングすることはできません (私の知る限り)。ルーターからグループを取得しますか?もしそうなら、どうすればよいですか?

4

3 に答える 3

2

IANA によって予約済みとしてリストされていない任意のマルチキャスト アドレス (224.0.0.0 から 239.255.255.255) を選択できます。

別のプログラムも同じアドレスを使用している可能性があります (可能性は低いですが)。プログラムが送信するアナウンス メッセージを適切に具体的にすることで、混乱が生じる可能性を最小限に抑えることができます。例えば

CORNSTALKS-DISCOVERY
HOST: {address:port}
[newline]

これにより、TCP 接続に使用するアドレスが受信者に通知されますが、最初の行が他の受信者によって拒否されていることがわかります。

于 2012-11-23T17:22:30.467 に答える
1

あなたは間違って理解しました。

あなたが話しているのは放送です。ブロードキャスト UDP データグラムは、サブネット内のすべてのコンピューターに送信されます。(技術的には、アドレス 255.255.255.255 にデータグラムを送信します。)

UDP ブロードキャストは特定のサブネット内で機能しますが、サブネットの境界を超えません。つまり、ほとんどのルーターは、ブロードキャスト データグラムをルーティングしない (スパムを減らす) ように構成されています。

OTOH マルチキャストはまったく別のものです。マルチキャストの目的は、データ転送に TCP (またはその他のユニキャスト) を使用しないようにすることです。他の多くの受信者に「一度に」何かを送信する必要がある場合に適しています。これらのマシンは、特定のマルチキャスト アドレス (この例では 225.0.0.37 など) について予備的に合意し、このマルチキャスト グループに「参加」します。特定のサブネット内では、すべてがブロードキャストとほぼ同じように機能しますが、ブロードキャストとは対照的に、マルチキャストはサブネットの境界を越えることもあります。これは、マシンがマルチキャスト グループに参加すると、適切なルーターに通知され、マルチキャスト データグラムを適切にルーティングできるためです。

編集:

結論(明確化のため)。

  1. マルチキャストを使用するには、マルチキャスト アドレスを選択する必要があります。これは、アプリケーションのポートを選択するようなものです。
  2. マルチキャストの主な目的は、多数の受信者にコンテンツを配信 (データを送信) することです。この場合、ユニキャストよりも効率的です。
  3. 「ネットワーク検出」は通常、ブロードキャストを介して行われます。理論的にはマルチキャストもこれに使用できますが、これはハエを大砲で殺すようなものです (ルーターはマルチキャスト セッションの有効期間も追跡する必要があるため)。
于 2012-11-23T17:16:58.740 に答える
0

マルチキャストを直接使用しないことをお勧めします。

むしろ、ゼロ構成ネットワークを使用してください。これは、mDNS/ DNS-SD化身であり、OS X と Windows では Apple のBonjourライブラリ、 Unix ではAvahi (おそらく OS X と Windows でも、確かではありません) から利用できます。

DNS-SD では、サービスの名前を定義してから、ライブラリを使用して、特定のホストでサービスが利用できることをアドバタイズしたり、サービスが利用可能なホストを参照したりします。これは、Macがプリンターやファイル共有などを検出する方法です-まさにあなたのユースケースだと思います。これは単純ですが、非常に効果的な技術です。そして、これは優れたオープン ソース実装を備えたオープン スタンダードであるため、独自の Apple にとって恐ろしい時間ではありません。

于 2012-11-23T17:38:30.200 に答える