c - 本地网络外的 UDP "sendto"

标签 c sockets networking udp sendto

嗨,我最近开始对 UDP 套接字进行编程,并且一直在将它们用于本地网络上的各种东西。但我似乎找不到任何关于如何在我可爱的防火墙之外发送 UDP 数据包的信息。

这是我用于绑定(bind) 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 是一种发送数据的“未连接”方式,因此您必须向路由器的防火墙添加规则,以便它路由端口(到应该接收数据的计算机)。

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

关于c - 本地网络外的 UDP "sendto",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608984/

相关文章:

linux - 配置ip别名和路由,处理网络不通

c - 一次读取一行字符

c++ - C/C++ 中的内联函数是一种使它们线程安全的方法吗?

c - 跟踪结果是否已经使用哈希表计算

javascript - socket.io 客户端 - 如果没有连接或服务器关闭,则不会触发回调

c - getaddrinfo 和 INADDR_ANY

java - 使用android手机发送TCP命令但没有发送数据

c - 扫描 radio 台

linux - 为什么我无法使用静态 ip ping 到任何地址?

python - 最简单的python网络消息传递