0

私はコードを見ていますが、その機能についてはよくわかりません。私は関数のドキュメントを見ましたが、それらはあまり正義をしていませんでした。コードは次のとおりです。

    private void m_InitUdpSock()
    {
        m_sockBroadcast = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        m_sockBroadcast.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast,1);

        m_localhost     = new IPEndPoint(IPAddress.Parse(m_localHostIP),BIND_PORT);
        m_remotehost    = new IPEndPoint(IPAddress.Broadcast,SCAN_PORT);

        m_sockBroadcast.Bind(m_localhost);
        m_sockBroadcast.BeginReceiveFrom(m_rxBuffer,0,m_rxBuffer.Length,SocketFlags.None,ref m_HostEp,new AsyncCallback(ReceiveBroadcastData),m_sockBroadcast);
    }

私の理解では、この関数はUDPメッセージをブロードキャストするためのソケットを設定しています。を使用しm_localhostてブロードキャストを送信しています。m_localhost 以前は:

m_localhost     = new IPEndPoint(IPAddress.Any,BIND_PORT);

次に、通信するネットワークアダプターを選択したかったので、使用したいネットワークアダプターのIPアドレスを取得m_localhostし、を最初の例に変更しました。次に、このBind関数を使用して、特定のネットワークアダプターを使用し、ポートを使用しBIND_PORTて応答メッセージをリッスンする必要があります。

ローカルホストに渡すIPのネットワークアダプターを実際に使用していることを誰かが確認できることを期待しています。

は、応答するパケットのIPアドレスを保持するm_remotehost単なる、であり、ポートは、発信ブロードキャストポートです。IPEndPointSCAN_PORT

SCAN_PORTBIND_PORT以前の開発者からのコメントがあります。しかし、それらが正確かどうかはわかりません。m_remotehostは、私との通信に使用するポートを指定していますか?(それは私には悪い習慣のように聞こえます)

SCAN_PORT  // Outgoing broadcast port.
BIND_PORT  // Incoming response listen port.

次に、BeginReceiveFromでは、ドキュメントの大部分が明確でしたが、前の開発者が「ref HostEp」を使用したパラメータは、次のように宣言されていたため、私を失望させました。

m_HostEp = new IPEndPoint(IPAddress.Any,0);

それで、私が電話をするときBeginReceiveFrom、それはまだメッセージをブロードキャストするためにローカルIPアドレスを使用していますか?それは私が望むものではありませんか? m_HostEp呼び出しでも使用されますEndReceiveFrom(iar,ref m_HostEp)


1.BIND_PORTSCAN_PORT
2.使用法とは何ですか、それは私m_HostEpのコミュニケーションにどのように影響しますか?

説明が必要な場合は、質問してください。

前もって感謝します。

4

1 に答える 1

1

コードスニペットを見ると、m_remotehost使用されていないため、その意味を判断できません SCAN_PORTが、ブロードキャストメッセージは、受信メッセージとは異なるポートで送信される可能性があります。

  • BIND_PORTメッセージを受信するポートです。
  • m_HostEpEndPoint受信したメッセージの送信者のが含まれます。

ソケットについて学ぶとき、私はhttp://tangentsoft.net/wskfaq/を読みました。これは、ブロードキャストネットワーキングが難しい場合があるため、「内部」について詳しく知りたい場合に役立つ参考資料であることがわかりました。ただし、特にc#を対象としているわけではありません。

于 2012-06-22T19:57:00.573 に答える