使用select c#后从socket.reciveMessageFrom接收msgInfo

时间:2012-08-21 10:00:38

标签: c# sockets udp

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

我使用了ReceiveMessageFrom并且它工作得很好,直到我添加了select。 选择后,收到的信息无效

我的代码:

    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无效,但如果我们删除select就没关系

1 个答案:

答案 0 :(得分:1)

你可能想看看这个: Socket.ReceiveMessageFrom Method

  

但是,返回的IPPacketInformation对象才有效   对于在套接字选项后到达本地计算机的数据包   已设置。如果套接字在绑定时发送数据包   本地端点(由Bind方法显式或由一个隐式显示)   Connect,ConnectAsync,SendTo或SendToAsync方法)及其   首先调用ReceiveMessageFrom方法,调用   ReceiveMessageFrom方法将返回无效的IPPacketInformation   这些数据包的对象。

     

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