在一个端口上绝对可以有两个UdpClient,但是在将它绑定到端点之前需要设置套接字选项.
private static void SendAndReceive() { IPEndPoint ep1 = new IPEndPoint(IPAddress.Any, 1234); ThreadPool.QueueUserWorkItem(delegate { UdpClient receiveClient = new UdpClient(); receiveClient.ExclusiveAddressUse = false; receiveClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); receiveClient.Client.Bind(ep1); byte[] buffer = receiveClient.Receive(ref ep1); }); UdpClient sendClient = new UdpClient(); sendClient.ExclusiveAddressUse = false; sendClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); IPEndPoint ep2 = new IPEndPoint(IPAddress.Parse("X.Y.Z.W"), 1234); sendClient.Client.Bind(ep1); sendClient.Send(new byte[] { ... }, sizeOfBuffer, ep2); }