如何向局域网内的每台机器发送UDP报文
How to send UDP messages to each machine in LAN
我想通过不使用广播的方式向局域网中的每台机器发送 Udp 消息。所以,我的代码是这样的:
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
There is no guarantee of delivery, ordering, or duplicate protection.
因此,您发现您的某些 UDP 数据包未送达。这很好,因为不保证 UDP 数据包传送。
我想通过不使用广播的方式向局域网中的每台机器发送 Udp 消息。所以,我的代码是这样的:
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
There is no guarantee of delivery, ordering, or duplicate protection.
因此,您发现您的某些 UDP 数据包未送达。这很好,因为不保证 UDP 数据包传送。