我正在尝试使用本机c代码在我的ad-hoc网络 - 192.168.2.x中发送广播消息。 但应用程序挂起sendto()。顺便说一句,挂起没有连接到while,包装它,正如我在调试中看到的那样,它只尝试sendto()并挂起。 我的代码有问题吗?
int broadcast(char* msg){
int bcast_sock;
struct sockaddr_in their_addr; // connector's address information
if((bcast_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
LOGE("ERROR BROADCASTING , socket wasn't created");
}
int broadcastEnable=1;
int ret=setsockopt(bcast_sock, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
if(ret < 0)
{
LOGE("ERROR BROADCASTING, Coulnt set broadcast enable through socket options");
}
their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(BROADCAST_PORT); // short, network byte order
their_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct
while(-1 == (int)sendto(bcast_sock, msg, strlen(msg), 0,
(struct sockaddr *)&their_addr, sizeof(struct sockaddr)));
return 0;
}
几点说明:
如果我使用java广播进行广播,它可以正常工作,我可以接收广播,即:
datagramSocket.setBroadcast(true);
int receiverPort = 4949;
sendPacket = new DatagramPacket(data, data.length, IPAddress, receiverPort);
还使用本机代码发送和接收非广播消息。
任何想法?
答案 0 :(得分:0)
我通过更改地址转换解决了这个问题:
their_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
到
inet_aton(IP,&their_addr.sin_addr);
其中IP = "192.168.2.1"
感谢帮助epx