UDP“发送到”本地网络外部

时间:2013-10-26 16:23:04

标签: 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_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 个答案:

答案 0 :(得分:1)

好吧,由于UDP是一种“未连接”的发送数据的方式,您必须向路由器的防火墙添加规则,以便它将端口路由到(应该接收数据的计算机)。

问题不是来自代码,而是来自网络基础设施。