UDP "sendto" вне локальной сети
Привет, я недавно начал программировать сокеты UDP, и я использовал их для всех видов вещей в локальной сети. но я не могу найти ничего о том, как отправить пакет UDP за пределы моего прекрасного брандмауэра.
Вот код, который я использую для привязки сокетов UDP
int handle = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( (unsigned short) /* port */);
bind( handle, (const sockaddr*) &address, sizeof(sockaddr_in) )
и вот код, который я использую для отправки пакета
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl( /*local network IP Address*/ );
address.sin_port = htons( (unsigned short) /* port */ );
sendto( handle, (const char*)/* packet data */, size, 0, (sockaddr*)&address, sizeof(sockaddr_in) );
И, наконец, вот код, который я использую для получения пакетов
sockaddr_in from;
socklen_t fromLength = sizeof( from );
int received_bytes = recvfrom( handle, (char*)data, size, 0, (sockaddr*)&from, &fromLength );
1 ответ
Решение
Ну, поскольку UDP - это "не связанный" способ отправки данных, вы должны добавить правила в брандмауэр вашего маршрутизатора, чтобы он маршрутизировал порт (на компьютер, который должен принимать данные).
Проблема не в коде, а в сетевой инфраструктуре.