gpt4 book ai didi

C++通过UDP发送数据包但没有收到

转载 作者:行者123 更新时间:2023-11-30 03:24:09 26 4
gpt4 key购买 nike

我目前正在做一个项目,需要每秒向公共(public)端口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) :

Datagrams to broadcast addresses can be only sent or received when the SO_BROADCAST socket flag is set.

换句话说,发送方和接收方都必须做:

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

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

关于C++通过UDP发送数据包但没有收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com