我在使用UDPClient编写UDP客服端程序的时候发现一个问题:在创建UDPUDPClient实例的时候我们可以指定一个本地IP地址和端口来绑定,或者让系统自动合理分配。因为是UDP客服端程序,所以我使用后一种方法创建实例。然而在异步接收的时候,我就不知道该怎么设置了,下面是MSDN上面的例子:
public static bool messageReceived = false;public static void ReceiveCallback(IAsyncResult ar)
{
  UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
  IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;  Byte[] receiveBytes = u.EndReceive(ar, ref e);
  string receiveString = Encoding.ASCII.GetString(receiveBytes);  Console.WriteLine("Received: {0}", receiveString);
  messageReceived = true;
}public static void ReceiveMessages()
{
  // Receive a message and write it to the console.
  IPEndPoint e = new IPEndPoint(IPAddress.Any, listenPort);
  UdpClient u = new UdpClient(e);  UdpState s = new UdpState();
  s.e = e;
  s.u = u;  Console.WriteLine("listening for messages");
  u.BeginReceive(new AsyncCallback(ReceiveCallback), s);  // Do some work while we wait for a message. For this example,
  // we'll just sleep
  while (!messageReceived)
  {
    Thread.Sleep(100);
  }
}
在调用BeginReceive方法时输入了s参数,s包括了e,u。这是不是要告诉系统只接收e指定的地址和端口? IPAddress.Any可以理解,但是listenPort该怎么指定呢,因为最开始是系统自动分配的端口,我也并不知道啊?另外,根据socket的udp编程,客服端是在调用了sendto函数后再确定了该套接字本地的IP地址和端口号,那UDPClient是不是也sendto调用后确定的呢?谢谢各位了!!