2011-06-18 8 views
7

UDPを使ってLAN上で再生される、ネットワークで接続された小さなゲームプロトタイプに取り組んでいます。ネットワーク上の他のコンピュータを発見するために、私は放送を調査してきました。しかし、私はまだUDPソケットのセットアップ/使用(ネットワーク初心者)に関するいくつかの詳細についてはまだ分かりません。ゲームが開始された後、私は良いライブラリを見つけましたが、最初はゲームを実行しているすべてのコンピュータを検出し、サーバーとして選択する必要があります。ですから、私の質問は以下の通りです:LANでのコンピュータの探索とサーバーのセットアップのためのUDPブロードキャスト

  • ブロードキャストの受信と送信に単一のUDPソケットを使用できますか?私はこれに対する答えが「はい」だと確信していますが、私はそれを確認したかったのです。
  • UDPを使用する場合、実際にbind()を使用する必要がありますか?私が理解する限り、connect()は必須ではありません。send()/recv()は、TCP(sendto()/recvfrom()の代わりに使用されている)のためです。
+0

これは十分に考え出された質問ですが、複数の質問が含まれており、おそらく別々の質問として役立つでしょう。 –

+0

@ 0A0D良い点、私はそれが多少関連していたので分けなければならないか分からなかった。私はUDPのものを一緒に残し、別の質問として最後の2つを引き出すでしょう。 – Gemini14

答えて

4
  1. はい、あなたは、ブロードキャストを送信ユニキャストを送信し、すべてのシングルソケットからのパケット(ブロードキャストまたはユニキャストのいずれか)を受け取ることができます。これは "送信者への返信"作業に非常に役立ちます。

  2. すべてのソケットがbindを使用する必要はありません。そうしないと、ポートが自動的に選択されます。しかし、誰かが、最初のパケット(場合によってはブロードキャスト)が正しく配信されるためには、事前共有ポート番号をバインドする必要があります。最初のパケットには送信元ポートとIPアドレスが含まれています。応答パケットはこれを使うことができます。

  3. 固定ポート番号に両端をバインドすると、ファイアウォールの構成が簡単になります。

  4. setsockopt(SO_BROADCAST)ブロードキャストパケットを送信しようとするとエラーが発生します。

+0

非常に明確な答え、特にバインディングについてのビット - 今は私にとってもっと意味があります。ありがとうございました! – Gemini14

関連する問題