Получение 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 для проверки наличия данных, таким образом, у вас может быть несколько клиентов, и если один из них перестанет отправлять данные, у вас могут быть другие клиентские данные, но в том, что вы сказали, после остановки одного из клиентов сервер не будет отвечать другим. Затем на вашем сервере ваш может иметь закрывающий флаг или дно для завершения программы