如何将 UDP 消息发送到局域网中的每台计算机
How to send UDP messages to each machine in LAN
我想通过不使用广播将 Udp 消息发送到 LAN 中的每台机器。 所以,我的代码是这样的:
int sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in tarAddr;
memset(&tarAddr, 0, sizeof(sockaddr_in));
tarAddr.sin_family = AF_INET;
tarAddr.sin_port = htons(1985);
char szTarAddr[16] = {0};
for(int i=2; i<255; i++)
{
sprintf(szTarAddr, "192.168.1.%d", i);
//if address is me, Ignore by continue...
...
tarAddr.sin_addr.s_addr = inet_addr(szTarAddr);
sendto(sock, msg, 18, 0, (sockaddr*)&tarAddr, sizeof(sockaddr));
}
只有大约前 20 台机器(192.168.1.2 ~ 192.168.1.20)可以接收消息,大多数其他机器无法接收到。
我尝试发送到 20 台机器,然后是sleep(5),然后发送到其他 20 台机器,依此类推。 但这种方式是没有用的。
根据定义,UDP 是无状态的,不保证交付。从 https://en.wikipedia.org/wiki/User_Datagram_Protocol
不保证交货、订购或重复保护。
因此,您观察到某些 UDP 数据包未传送。这完全没问题,因为不能保证UDP数据包的交付。
相关文章:
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- C++ 计算机猜测用户数量在 7 次猜测以内
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何在个人计算机和群集 (c++) 上生成相同的随机数
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 预处理的 C/C++ 文件是否特定于计算机?
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- 我的 c++ 程序是否会从世界各地的计算机(在我的局域网之外)连接到本地 MySQL 数据库
- 如何将 UDP 消息发送到局域网中的每台计算机
- 程序远程关闭多个Windows计算机在局域网c++
- 多播c++在同一局域网的多台计算机
- 在局域网上选择一台计算机作为服务器
- 管道可以在局域网计算机之间使用吗