我想通过不使用广播将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台计算机,然后睡眠(5),然后发送到其他20台计算机,依此类推。但是这种方式是没有用的。

最佳答案

根据定义,UDP是无状态的,并且不能保证传递。来自https://en.wikipedia.org/wiki/User_Datagram_Protocol


  不保证交货,订购或重复保护。


因此,您已经观察到某些UDP数据包未传递。完全可以,因为不能保证UDP数据包的传递。

08-26 09:06