UDP Socket на порт (например 12345). И отправляет и принимает данные (на любой IP и с любого IP).
Запуск всего делаю так:
- Код: Выделить всё
'инициализация сокета
errRet = WSAStartup(WINSOCK_V22, wsStruct)
'проверка на ошибки
. . .
'создание сокета
handleWS = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
'проверка на ошибки
. . .
'биндим сокет
socketAddr.sin_family = AF_INET
socketAddr.sin_addr = inet_addr("0.0.0.0")
socketAddr.sin_port = htons(12345)
socketAddr.sin_zero = String(8, vbNullChar)
errRet = bind(handleWS, socketAddr, Len(socketAddr))
'проверка на ошибки
. . .
'далее делаю событие, но что бы просто и быстро, на невидимую кнопку
errRet = WSAAsyncSelect(handleWS, CommandRecv.hwnd, WM_MOUSEMOVE, FD_READ + FD_WRITE)
Это стартовая часть. Она отрабатывает без проблем. Далее отправка, которая тоже без проблем идет:
- Код: Выделить всё
'отправляю себе же (в локалке)
data2send.sin_family = AF_INET
data2send.sin_addr = inet_addr("192.168.0.1")
data2send.sin_port = htons(12345)
data2send.sin_zero = String(8, vbNullChar)
temp = "Сообщение!!!"
errRet = sendto(handleWS, temp, Len(temp), 0, data2send, Len(data2send))
Возникает событие в CommandRecv, которое обрабатываю так:
- Код: Выделить всё
data2recv.sin_family = AF_INET
data2recv.sin_addr = inet_addr("0.0.0.0")
data2recv.sin_port = htons(0)
data2recv.sin_zero = String(8, vbNullChar)
buffData = String(512, vbNullChar)
buffLen = 512
errRet = recvfrom(handleWS, buffData, buffLen, 0, data2recv, Len(data2recv))
Вот как раз на последней строчке кода программа уходит в "аут". Ждать приходится до 30 секунд. Реакции ни какой. Событие точно ловится. Проверял, Beep вместо этого кода ставил. Отправка идет корректно - количество отправленных байт совпадает.
Нужна помощь в этом деле. Желательно с разъяснением.
