Привет, я начал программировать сокеты UDP в последнее время, и я использовал их для всех видов материалов в локальной сети. но я не могу найти ничего о том, как отправить UDP-пакет за пределы моего прекрасного брандмауэра.UDP «sendto» за пределами локальной сети
Вот код, я использую для связывания подножий 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);
Скорее всего, проблема заключается в межсетевом экране на стороне * сервера *. Работает ли UDP-трафик с использованием ['netcat'] (http://netcat.sourceforge.net/)? Если нет, сначала исправьте брандмауэры (на домашнем маршрутизаторе вам нужно настроить перенаправление портов на стороне сервера или даже использовать сложную схему [NAT traversal] (http://en.wikipedia.org/wiki/NAT_traversal) в ваше приложение). – phihag