Как открыть закрытый UDP-клиент? - PullRequest
0 голосов
/ 15 марта 2011

Я посылаю несколько байтов на определенный порт и слушаю на том же порту:

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();

Проблема в том, что мне нужно повторно транслировать (для другого конца отправляет мне обновления), но тогда у меня есть ObjectDisposedException на udpBroadcast. Я понимаю, Close() утилизировал его, но потом не нашел способа открыть его. Попытка воссоздать (новый) udpBroadcast не помогла. Спасибо John

Ответы [ 2 ]

0 голосов
/ 15 марта 2011

В конце концов я использовал этот шаблон:

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/ Работает

0 голосов
/ 15 марта 2011

Вам может потребоваться сбросить данные, а также отправить их перед закрытием и попыткой повторного открытия. Это вызывало у меня проблемы в прошлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...