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来监听响应消息。

我希望有人可以确认我确实在使用我通过 localhost 的 IP 的网络适配器。

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用法,它如何影响我的沟通?

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

提前致谢。

4

1 回答 1

1

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

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

在学习套接字时,我阅读了http://tangentsoft.net/wskfaq/,如果您想了解更多关于“幕后”的事情,因为广播网络可能很棘手,它是一个很好的参考。它不是专门针对 c# 的。

于 2012-06-22T19:57:00.573 回答