我当前正在从事一个项目,需要每秒将数据包广播到公共(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)
:
换句话说,发送方和接收方都必须执行以下操作:
int value = 1;
if(-1 == setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &value, sizeof value))
// Handle error.
如果检查
sendto
的返回值,则必须为-1和errno == EACCESS
。 始终检查返回值。