我正在对c++客户端进行编程,以从服务器接收数据包(UDP广播)。这是一个硬件交换机(仅一个方向)系统,因此我没有有关发件人地址的信息或任何其他信息。都可以编译并绑定(bind)OK,但是没有收到任何数据包。
WSAStartup(0x0101, &_wsaData);
memset((char *)&_sockaddr, 0, sizeof(_sockaddr));
_sockaddr.sin_addr.s_addr = _nAdapterIp;
_sockaddr.sin_family = _nadressFam;
_sockaddr.sin_port = _usPort; //Gave it a try with (0) - also not working
_socket = socket(_nadressFam, SOCK_DGRAM, 0); //Gave it a try with (17) - UDP for the 3 rd parameter - not working
char broadcast='1';
setsockopt(_socket, SOL_SOCKET, SO_BROADCAST, &broadcast ,sizeof(broadcast));
bind(_socket, (sockaddr*) & _sockaddr, sizeof (_sockaddr));
char* recvbuf = new char[_nPacketSize + 1];
int nSize = recv(_socket, recvbuf, _nPacketSize + 1, 0);
最佳答案
即使我不确定这是您摘要中的唯一警告,也请稍等片刻,以发表评论
您对setsockopt
的调用是有效的,但是您传递的是字符 1(实际上是十进制值49),因此第四个参数不好。
unsigned char broadcast = 1;
if (setsockopt(_socket, SOL_SOCKET, SO_BROADCAST, &broadcast ,sizeof(broadcast)) == -1) {
//handle errors appropriately
}
关于c++ - c++从广播电台接收数据包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20352970/