私はコードを見ていますが、その機能についてはよくわかりません。私は関数のドキュメントを見ましたが、それらはあまり正義をしていませんでした。コードは次のとおりです。
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
単なる、であり、ポートは、発信ブロードキャストポートです。IPEndPoint
SCAN_PORT
SCAN_PORT
BIND_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_PORT
とSCAN_PORT
2.使用法とは何ですか、それは私m_HostEp
のコミュニケーションにどのように影響しますか?
説明が必要な場合は、質問してください。
前もって感謝します。