Member 13769611 Ответов: 1

Для передачи данных протокол UDP для нескольких клиентов с#


Я хочу, чтобы обновление статуса от устройств, которые общаются по udp, происходило каждую минуту. какой метод я должен использовать. Любые предложения будут оценены по достоинству. Спасибо

Что я уже пробовал:

Я уже пробовал это сделать

foreach (IPAddress ips in iPAddresses)
        {
            Byte[] receiveBytes = { };
            Byte[] dataToSend = new Byte[] { 0x8B, 0xB9, 0x00, 0x03, 0x05, 0x01, 0x09 };
            IPEndPoint endPoint = new IPEndPoint(ips, 1024);
            EndPoint ep = (EndPoint)endPoint;
            Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            try
            {
                udpClient.Connect(endPoint);
                udpClient.SendTo(dataToSend, ep);
               // Thread.Sleep(50);
                IPEndPoint localip = new IPEndPoint(IPAddress.Any, 1200);

                UdpClient receivingUdpClient = new UdpClient(localip);


                receiveBytes = receivingUdpClient.Receive(ref endPoint);
               // Thread.Sleep(50);

                udpClient.Close();


                receivingUdpClient.Close();
                receivingUdpClient.Dispose();
                updateData(receiveBytes, ips);
            }
            finally
            {

                udpClient.Dispose();
            }

        }



Проблема, которую я могу найти, заключается в этой линии-

receiveBytes = receivingUdpClient.Receive(ref endPoint);



конечная точка ref в receive() имеет только 1-й ip-адрес. он не меняется. Метод Send способен изменять ip-адрес. но не приемный метод.

Я пробовал и некоторые другие методы до этого. но именно этим я сейчас и занимаюсь

1 Ответов

Рейтинг:
1

Gerry Schmitz

Вы не проверяете статус "подключение" (возврат).

Вы, вероятно, не удается подключиться; или не "ждать" достаточно долго.

Но поскольку вы фактически игнорируете любые ошибки ("пустой" ex-обработчик), вам остается только гадать, что происходит.


Member 13769611

Итак, вы имеете в виду, что этот код выше, который я написал, будет работать для нескольких клиентов... просто я не могу подключиться, поэтому данные принимаются по 1-му IP-адресу.
Я попробую добавить ожидание и проверить соединение тоже... и дам вам знать, что работает и как...
Большое вам спасибо, что заглянули в него...

Member 13769611

Привет, Джерри, это не работает таким образом. Это всегда становится правдой при проверке состояния подключения. И еще одна главная проблема, которую я не могу понять, заключается в том, что даже после того, как я избавляюсь от udp-сокета, он также остается подключенным к этому IP-адресу.
Это означает, что если я начну новую отладку, то удаленная конечная точка будет такой же, как и в предыдущей отладке. как такое возможно

Member 13769611

Итак, я прочитал и пришел к выводу, что на самом деле udp никогда не подключается так, как tcp. так что нет необходимости использовать метод connect. без этого udp передает данные.. так что связь здесь не проблема.. Я думаю, что проблема в том, чтобы получить uudpclient.

Member 10765128

возьмите UdpClient из цикла foreach создайте сокет где-нибудь еще и сделайте его частной переменной отсюда используйте этот сокет для отправки и получения.