udp为啥收不到广播中的数据,该怎么处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了udp为啥收不到广播中的数据,该怎么处理相关的知识,希望对你有一定的参考价值。
参考技术Audp为什么收不到广播中的数据,该怎么处理,解答如下
创建UDP的socket server,端口就是返回的数据包使用的端口,然后在server的接收函数里面获取,删选;
或者也可以直接起个原始套接字的server,接收所有的套接字流,然后根据你的返回数据包的端口慢慢删选;
linux下的UDP通讯怎么接受不到广播
我写的是个多客户端通过服务器中转信息的简易程序,但是在广播的时候出现问题(说明:把广播地址改为服务器地址时接收正常)
下面是广播程序:
void broad_cast()
int len = sizeof(struct sockaddr);
int broad_flag = 1;
setsockopt(sock_fd,SOL_SOCKET,SO_BROADCAST,&broad_flag,sizeof(int));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(6789);
serv_addr.sin_addr.s_addr = inet_addr("255.255.255.255");
send_msg.flag = 0;
strcpy(send_msg.msg_buf,"it's a broadcast");
send_msg.msg_len = (4 + sizeof(unsigned long) * 2 + 4 +strlen(send_msg.msg_buf) + 1);
sendto(sock_fd,(void *)&send_msg,send_msg.msg_len,0,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr));
recvfrom(sock_fd,(void *)&msg,sizeof(struct udp_pack_info),0,(struct sockaddr *)&serv_addr,&len);
printf("msg:%s\n",msg.msg_buf);
broad_flag = 0;
setsockopt(sock_fd,SOL_SOCKET,SO_BROADCAST,&broad_flag,sizeof(int));
服务器程序(节选):
sock_fd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&serv_addr,sizeof(struct sockaddr_in));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(6789);
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
if( bind(sock_fd,(void *)&serv_addr,sizeof(struct sockaddr_in)) < 0)
perror("bind");
return -1;
while(1)
recvfrom(sock_fd,(void *)&msg,sizeof(struct udp_pack_info),0,(struct sockaddr *)&cli_addr,&len);
sendto(sock_fd,(void *)&msg,msg.msg_len,0,(struct sockaddr *)&cli_addr,sizeof(struct sockaddr));
广播的目的是希望可以获得服务器的地址信息,但是用255.255.255.255或同网段内的广播地址的时候,服务器端都收不到信息,那么客户端也不知道服务器的地址了;为了验证是否程序有问题,把广播地址改为服务器的地址时,发送和接收信息都正常。那么,郁闷了,问题出在哪里呢???
如果接收正常就OK了?你发送到广播地址,接收到的是服务器发出的.
发送 -> to 255.255.255.255
接受 -> bind 0.0.0.0 -> from server_addr
要不然就是你没有说清楚
---------------------------
你希望服务器收到自己的广播?那个不是保证可以正确的。不一定会收到几个,也可能没有。 参考技术B 你好 我现在虚拟机linux 发送广播 在win接收不到广播。 win发送广播虚拟机linux能接收到,请问一下,怎么回事啊。 参考技术C 遇到同样的问题,UDP中单项发送的时候我能收到,广播时我就收不到。请问楼主解决了吗,解决了通知一下啊。我QQ273889196,可以QQ上交流。
我的问题已经解决了,是广播地址的问题,建议你上网好好查查,广播地址不一定是255的!!! 参考技术D 不同子网的广播地址可能不同
好的风格是不在程序中写死地址
具体的广播地址可以用ifconfig 查看
以上是关于udp为啥收不到广播中的数据,该怎么处理的主要内容,如果未能解决你的问题,请参考以下文章