澄清代码

时间:2012-06-22 17:33:09

标签: c# network-programming ip-address network-protocols

我在看代码,我不确定它的功能。我查看了有关功能的文档,但是他们没有做太多公正。这是代码:

    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);

然后,我想select the Network Adapter我选择与之通信,因此我检索了我想要使用的网络适配器的IP地址,并将m_localhost更改为第一个示例。然后使用Bind函数,它应该使用特定的网络适配器,并使用端口BIND_PORT来收听respoonse消息。

我希望有人可以确认我确实使用了IP的网络适配器我传递了localhost。

m_remotehost只是IPEndPoint,它将保存响应的数据包的IP地址,端口SCAN_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用法,它如何影响我的沟通?

如果您需要任何澄清,请询问!

提前致谢。

1 个答案:

答案 0 :(得分:1)

查看代码段,未使用m_remotehost,因此您无法从中确定SCAN_PORT的含义,但显然广播消息可以在与传入消息不同的端口上发送收到了。

  • BIND_PORT是您将收到消息的端口。
  • m_HostEp将包含您收到的邮件的发件人EndPoint

在了解套接字时,我读了http://tangentsoft.net/wskfaq/,如果你想了解更多关于“引擎盖下”的内容,那么它就是一个很好的参考,因为广播网络可能很棘手。它不是专门针对c#的。