Мы слушаем UDP-трафик в приложении Win32 / MFC. Разъем для прослушивания создается с использованием ниже.
CSocket sock;
sock.Create(LISTEN_PORT,SOCK_DGRAM);
Мы вызываем CAsyncSocket :: ReceiveFrom () в цикле рабочего потока, чтобы разрешить получение пакетов в нашем приложении.
Кажется, что есть проблемы при работе на машине с несколькими сетевыми картами. Например, 2 проводные сети и одна беспроводная сеть ad hoc. При такой конфигурации мы, кажется, не получаем данные UDP, отправленные на наш компьютер от однорангового узла в беспроводной сети adhoc.
Напротив, мы МОЖЕМ отправлять UDP одному и тому же узлу. Таким образом, выясняется, как получить трафик для беспроводного однорангового узла, но трафик, исходящий от однорангового узла, не попадает в наш сокет.
Я подозреваю, что это потому, что машина многодомная. Моей первой мыслью было убедиться, что мы связываем сокет UDP на всех сетевых интерфейсах. Однако я проверил документацию CSocket :: Create, и она указывает, что если вы используете значение по умолчанию NULL для третьего аргумента (lpszSocketAddress), он будет прослушивать все сетевые интерфейсы.
Так что теперь я в тупике. Кто-нибудь знает, есть ли хитрость для прослушивания трафика UDP на многосетевой машине, который мне не хватает? Вводит ли беспроводная сеть adhoc какие-либо сложности?