如何将 UDP 消息发送到局域网中的每台计算机

How to send UDP messages to each machine in LAN

本文关键字:局域网 计算机 UDP 消息      更新时间:2023-10-16

我想通过不使用广播将 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数据包的交付。

相关文章: