如何打开一个封闭的UDP客户端?

时间:2011-03-15 14:54:18

标签: c# sockets udp

我在特定端口上发送一些字节并侦听同一端口:

udpBroadcast = new System.Net.Sockets.UdpClient(2333); // local binding
udpBroadcast.Client.SetSocketOption(SocketOptionLevel.Socket,
   SocketOptionName.ReuseAddress, true);
udpBroadcast.Connect("255.255.255.255", 2333);
udpBroadcast.Send(sendBytes, sendBytes.Length);
udpBroadcast.Close();

udpResponse = new System.Net.Sockets.UdpClient(2333); // local binding
udpResponse.Client.SetSocketOption(SocketOptionLevel.Socket,
   SocketOptionName.ReuseAddress, true);

BeginAsyncReceive();

问题是我需要重新广播(另一端发送给我更新)但是我在udpBroadcast上有一个ObjectDisposedException。 我理解Close()处理它但后来我发现无法打开它。 试图重新创建(新)udpBroadcast并没有帮助。 谢谢 约翰

2 个答案:

答案 0 :(得分:0)

您可能需要刷新数据以及在关闭并尝试重新打开之前发送数据。这在过去曾引起我的问​​题。

答案 1 :(得分:0)

最终我使用了这种模式:

using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
    var endPoint = new IPEndPoint(ip, port);
    socket.Bind(endPoint);
    using (var client = new UdpClient() {Client = socket})
    {
        var destinationIP = IPAddress.Broadcast;
        client.Connect(destinationIP, port);
        client.Send(bytes, bytes.Length);
    }
}

我发现了 http://snipplr.com/view/28192/bind-a-socket-including-udpclient-and-tcpclient-to-a-local-network-interface-card-nic/ 它的工作原理