Roland M Smith Ответов: 1

Получение UDP-сообщений в неблокирующем режиме с помощью waitformultipleobjects


У меня есть две программы, которые являются парами клиент/сервер, и они используют UDP для общения друг с другом. В разделе "Что вы пробовали" приведен пример того, что делает сервер для получения запросов от клиента. Сообщение "stop" отправляется нажатием кнопки в окне сервера, когда цикл recvfrom выполняется в фоновом потоке.

В другом проекте я использую WaitForMultipleObjects и думаю, что мне следует изменить свой UDP-сервер, чтобы использовать его. Вместо того чтобы посылать сообщение "стоп" самому себе, я мог бы использовать событие для сигнала WaitForMultipleObjects и проверить код возврата, чтобы увидеть, было ли событие сигнализировано или поступили данные.

Я не смог найти хороший пример того, что мне нужно изменить в своем коде Winsock.

Я был бы признателен за любые хорошие предложения.

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

RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)

StructSize = 16
RecvAddr4.sin_family = AF_INET
RecvAddr4.sin_port = htons(aui_port)

iResult = bind(RecvSocket, RecvAddr4, StructSize)

do while true
   bytesrecvd = recvfrom(RecvSocket, recvbuf, &
                bufsize, 0, RecvAddr4, StructSize)
   if recvbuf = "stop" then
      exit
   else
      ' do something with the data
   end if
loop

closesocket(RecvSocket)

saide_a

Я не знаю, правильно я понял вашу проблему или нет!
но вы всегда можете проверить значение bytesrecvd для проверки наличия данных, таким образом, у вас может быть несколько клиентов, и если один из них перестанет отправлять данные, у вас могут быть другие клиентские данные, но в том, что вы сказали, после остановки одного из клиентов сервер не будет отвечать другим. Затем на вашем сервере ваш может иметь закрывающий флаг или дно для завершения программы

1 Ответов

Рейтинг:
1

Member 13696310

Я не уверен,я очень хорошо понимаю ваши вопросы.
этот код является сервером ,получить сообщение от клиента, если сообщение является "стоп" и выйти.
"

if recvbuf = "stop" then
- Думаю, так и должно быть
if recvbuf == "stop" then


Roland M Smith

Пример кода не является C, поэтому знак равенства является правильным. То, как у меня это работает, я просто хочу сделать это по-другому.