C++ 通过 UDP 发送数据包,但不接收数据包

C++ Send packet through UDP but not receiving it

本文关键字:数据包 C++ UDP 通过      更新时间:2023-10-16

我目前正在做一个项目,需要每秒将数据包广播到公共端口D88,但客户端无法接收数据包。我不确定我是否使用了正确的方式发送数据包。

int sockfdBroad;
struct sockaddr_in addrBroad;
swStat.packetBroadSent=0;
sockfdBroad=socket(AF_INET,SOCK_DGRAM,0);

bzero(&addrBroad,sizeof(addrBroad));
addrBroad.sin_family = AF_INET;
addrBroad.sin_addr.s_addr=inet_addr("192.168.1.255");
addrBroad.sin_port=htons(3464);   

if ((cycles%1000)==0)
    {
        currenttime = getMicrosTimeStamp();
        createTimePacket(bufferTime,currenttime,Odroid_Trigger);
        sendto(sockfdBroad,bufferTime,PACKET_LENGTH_TIME,0,(struct sockaddr *)&addrBroad,sizeof(addrBroad));
        swStat.packetBroadSent++;
    }

假设 192.168.1.255 的网络掩码为 255.255.255.0,则 192.168.1.255 是广播地址。从man ip(7)

只有在设置了SO_BROADCAST套接字标志时,才能发送或接收到广播地址的数据报。

换句话说,发送方和接收方都必须执行以下操作:

int value = 1;
if(-1 == setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &value, sizeof value))
    // Handle error.

如果检查 sendto 的返回值,它必须是 -1 且 errno == EACCESS始终检查返回值。