Linux系统下UDP发送和接收广播消息小例子
来源:互联网 发布:重庆百度seo排名公司 编辑:程序博客网 时间:2024/05/17 07:04
// 发送端#include <iostream>#include <stdio.h>#include <sys/socket.h>#include <unistd.h>#include <sys/types.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>using namespace std;int main(){setvbuf(stdout, NULL, _IONBF, 0); fflush(stdout); int sock = -1;if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { cout<<"socket error"<<endl;return false;} const int opt = 1;//设置该套接字为广播类型,int nb = 0;nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));if(nb == -1){cout<<"set socket error..."<<endl;return false;}struct sockaddr_in addrto;bzero(&addrto, sizeof(struct sockaddr_in));addrto.sin_family=AF_INET;addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST);addrto.sin_port=htons(6000);int nlen=sizeof(addrto);while(1){sleep(1);//从广播地址发送消息char smsg[] = {"abcdef"};int ret=sendto(sock, smsg, strlen(smsg), 0, (sockaddr*)&addrto, nlen);if(ret<0){cout<<"send error...."<<ret<<endl;}else{printf("ok ");}}return 0;}
// 接收端 http://blog.csdn.net/robertkun#include <iostream>#include <stdio.h>#include <sys/socket.h>#include <unistd.h>#include <sys/types.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>using namespace std;int main(){setvbuf(stdout, NULL, _IONBF, 0); fflush(stdout); // 绑定地址struct sockaddr_in addrto;bzero(&addrto, sizeof(struct sockaddr_in));addrto.sin_family = AF_INET;addrto.sin_addr.s_addr = htonl(INADDR_ANY);addrto.sin_port = htons(6000);// 广播地址struct sockaddr_in from;bzero(&from, sizeof(struct sockaddr_in));from.sin_family = AF_INET;from.sin_addr.s_addr = htonl(INADDR_ANY);from.sin_port = htons(6000);int sock = -1;if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { cout<<"socket error"<<endl;return false;} const int opt = 1;//设置该套接字为广播类型,int nb = 0;nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));if(nb == -1){cout<<"set socket error..."<<endl;return false;}if(bind(sock,(struct sockaddr *)&(addrto), sizeof(struct sockaddr_in)) == -1) { cout<<"bind error..."<<endl;return false;}int len = sizeof(sockaddr_in);char smsg[100] = {0};while(1){//从广播地址接受消息int ret=recvfrom(sock, smsg, 100, 0, (struct sockaddr*)&from,(socklen_t*)&len);if(ret<=0){cout<<"read error...."<<sock<<endl;}else{printf("%s\t", smsg);}sleep(1);}return 0;}
自已在Linux虚拟机下测试可以成功, 前提是要把主机设置在同一网段内, 还有就是不要忘记关闭Linux的防火墙.. 可以使用setup命令进行设置。
(我在测试的时候只能发送不收接收,折磨了我半天,后来才想到是Linux防火墙的问题。。)
关于虚拟机的网卡配置,建议选择桥接模式。NAT的模式的话,是受限制的,可能会收不到广播消息。
具体的参考网上的文章吧。。
祝你成功。。
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- 局域网下UDP广播发送与接收
- Linux下UDP的组播接收和发送的简单例子
- Android发送和接收UDP广播
- 使用UDP发送和接收消息
- udp发送和接收消息,服务端
- JAVA之UDP广播接收与发送小程序
- qt 下UDP消息的接收和发送和TCP发送文件
- Linux下组播&广播消息小例子
- C语言socket UDP广播的发送和接收示例
- 发送广播和接收广播
- 接收和发送广播
- ehcache监听器的用法
- 触摸屏(TP)乱跳原因总结
- ASIHTTPRequest-Debug选项
- Linux音频编程-OSS编程-alsa编程
- select + 线程池 回应服务器(windows)
- Linux系统下UDP发送和接收广播消息小例子
- 设置IIs IE7兼容
- Linux 下 Sublime Text 2 破解
- 巴科斯范式(BNF)
- 技术人员的横向纵向发展
- tp 驱动分析记
- 计算广告学习笔记2.4 合约广告系统-Hadoop
- 淘宝开放平台Java版Demo,可能需要常用的网址,一些基本的参数说明
- spring组件扫描<context:component-scan/>使用详解 .