0

我在我的计算机上使用了几个虚拟 IP,然后我收到一条消息,我需要知道我在哪个 Ip 上收到了消息。

我使用了 ReceiveMessageFrom,在我添加选择之前效果很好。选择后收到的信息无效

我的代码:

    IPEndPoint ipep2 = new IPEndPoint(IPAddress.Any , xxx);
    Socket socket2 = new Socket(AddressFamily.InterNetwork, 
        SocketType.Dgram, ProtocolType.Udp);
    socket2.Bind(ipep2);

    ArrayList copySocketsList = new ArrayList();
    copySocketsList.Add(socket2);

    Socket.Select(copySocketsList  , null , null , 1000);

    foreach(Socket soc in copySocketsList)
    {
        int recv = soc.ReceiveMessageFrom(data , 0 , 1024 , ref flags , ref Remote , out ipInfo);

    }

在该示例中, ipInfo 无效,但如果我们删除选择它会很好

4

1 回答 1

1

你可能想看看这个: Socket.ReceiveMessageFrom 方法

但是,返回的 IPPacketInformation 对象仅对设置了套接字选项后到达本地计算机的数据包有效。如果套接字在绑定到本地端点(显式地通过 Bind 方法或隐式地通过 Connect、ConnectAsync、SendTo 或 SendToAsync 方法之一)与其第一次调用 ReceiveMessageFrom 方法之间发送数据包,则调用 ReceiveMessageFrom 方法将为这些数据包返回无效的 IPPacketInformation 对象。

为确保所有 IPPacketInformation 对象均有效,应用程序应在使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法将其绑定到本地端点之前将 PacketInformation 套接字选项设置为 true。

于 2012-08-21T12:15:17.927 回答