C UDP“;“发送到”;在本地网络之外

C UDP“;“发送到”;在本地网络之外,c,sockets,networking,udp,sendto,C,Sockets,Networking,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_por

嗨,我最近开始编程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 );
嗯,由于UDP是一种“未连接”的数据发送方式,您必须向路由器的防火墙添加规则,以便它将端口路由(到应该接收数据的计算机)


问题不是源于代码,而是源于网络基础设施。

问题很可能是服务器端的防火墙。使用UDP通信是否可以正常工作?如果没有,首先修复防火墙(在家庭路由器上,您必须在服务器端配置端口转发,甚至在应用程序中采用精心设计的方案)。您不必提供ISP IP或任何东西来查找接收器打开的本地网络?这个页面有一个关于你是否在防火墙后面的小部分,这有助于回答我的问题。