嗨,我最近开始对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是一种发送数据的“未连接”方式,因此您必须将规则添加到路由器的防火墙中,以便它将端口路由到(应该接收数据的计算机)。
问题不在于代码,而在于网络基础架构。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句