- // 发送端
- #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的模式的话,是受限制的,可能会收不到广播消息。
具体的参考网上的文章吧。。
祝你成功。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2014-08-11 boost 循环缓冲区
2014-08-11 boost::property_tree读取解析.xml文件
2014-08-11 boost::property_tree读取解析ini文件--推荐
2014-08-11 使用ffmpeg向crtmpserver发布rtsp流
2014-08-11 crtmpserver流媒体服务器的介绍与搭建
2014-08-11 boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。
2014-08-11 boost之program_options库,解析命令行参数、读取配置文件