我在我的计算机上使用了一些虚拟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就没关系
答案 0 :(得分:1)
你可能想看看这个: Socket.ReceiveMessageFrom Method
但是,返回的IPPacketInformation对象才有效 对于在套接字选项后到达本地计算机的数据包 已设置。如果套接字在绑定时发送数据包 本地端点(由Bind方法显式或由一个隐式显示) Connect,ConnectAsync,SendTo或SendToAsync方法)及其 首先调用ReceiveMessageFrom方法,调用 ReceiveMessageFrom方法将返回无效的IPPacketInformation 这些数据包的对象。
为确保所有IPPacketInformation对象都有效,应用程序应在使用SetSocketOption(SocketOptionLevel,SocketOptionName,Boolean)方法绑定到本地端点之前将PacketInformation套接字选项设置为true。