并发发送和接收数据在一个端口与udpclient

问题描述:

我试图发送和接收数据到本地端口50177的特定端点。发送数据确实很好,但是当程序试图接收数据时它不能接收任何。当我用Wireshark嗅探网络时,我发现服务器向我发送了数据。我知道我不能同时在一个端口上安装2个UdpClient。并发发送和接收数据在一个端口与udpclient

任何人都可以帮助我吗?

UdpClient udpClient2 = new UdpClient(50177); 
IPEndPoint Ip2 = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 1005); 
udpClient2.Send(peerto255, peerto255.Length, Ip2); 

IPEndPoint Ip = new IPEndPoint(IPAddress.Parse("10.10.240.1"), 1005); 
var dgram = udpClient2.Receive(ref Ip); 

使用相同的IPEndPoint接收您用于发送的IPEndPoint。

UdpClient udpClient2 = new UdpClient(50177); 
IPEndPoint Ip2 = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 1005); 
udpClient2.Send(peerto255, peerto255.Length, Ip2); 
var dgram = udpClient2.Receive(ref Ip2); 

您可以在一个端口上确实拥有两个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); 
}