当前位置: 首页 > news >正文

C/S架构学习之广播

  • 广播:
  • 一台主机可以将一个数据包同时发送给同一局域网所有主机
  • IPV4中,广播地址本网段最大的IP地址或者“255.255.255.255”;
  • 注意:
  • 广播本质上是UDP通信技术;
  • 只有用户数据报套接字才能使用广播的方式;
  • 设置广播的流程:
  • 发送方(UDP的客户端):
  • 一、创建用户数据报套接字(socket函数):
	int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(-1 == sockfd){perror("sockfd error");exit(-1);}
  • 二、填充广播信息结构体( struct sockaddr_in):
	struct sockaddr_in serveraddr;socklen_t serveraddr_len = sizeof(serveraddr);memset(&serveraddr,0,serveraddr_len);serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(IP);serveraddr.sin_port = htons(PORT);
  • 三、设置允许发送广播(setsockopt函数):
	int opt = 1;if(-1 == (setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&opt,sizeof(opt)))){perror("setsockopt error");exit(-1);}
  • 四、发送广播信息(sendto函数):
	char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));fgets(buf,128,stdin);buf[strlen(buf)-1] = '\0';if(!strncmp(buf,"quit",4)){break;}//给服务器发送数据if(-1 == (sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&serveraddr,serveraddr_len))){perror("sendto error");exit(-1);}}
  • 五、关闭用户数据报套接字(close函数):
 	close(sockfd);
  • 接收方(UDP的服务器):
  • 一、创建用户数据报套接字(socket函数):
	int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(-1 == sockfd){perror("sockfd error");exit(-1);}
  • 二、填充广播信息结构体(struct sockaddr_in):
	struct sockaddr_in serveraddr,clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr,0,serveraddr_len);serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(IP);serveraddr.sin_port = htons(PORT);
  • 三、用户数据报套接字和广播信息结构体绑定(bind函数):
	if(-1 == (bind(sockfd,(struct sockaddr *)&serveraddr,serveraddr_len))){perror("bind error");exit(-1);}
  • 四、接收广播信息(recvfrom函数):
	char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));//接收客户端发来的消息if(-1 == (recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&clientaddr,&clientaddr_len))){perror("recvfrom error");exit(-1);}printf("客户端[%s:%d]发来数据[%s]\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port),buf);}
  • 五、关闭用户数据报套接字(close函数):
 	close(sockfd);
http://www.lryc.cn/news/218716.html

相关文章:

  • 帧间快速算法论文阅读
  • mooc单元测验第一单元
  • AOC显示器出问题了?别担心,简单重置一下就OK了
  • ok-解决qt5发布版本,直接运行exe缺少各种库的问题
  • 【JavaEE】cookie和session
  • 关于CSS的几种字体悬浮的设置方法
  • 心脏骤停急救赋能
  • Android 13.0 根据app包名授予app监听系统通知权限
  • 校园招聘系统
  • SpringBoot-SpringCache缓存
  • 服务器带宽忽然暴增,不停的触发告警
  • Linux学习笔记之二(环境变量)
  • 设计模式——备忘录模式(Memento Pattern)
  • C++ 代码实例:多项式除法简单计算工具
  • MySql表自修改报错:You can‘t specify target table ‘student‘ for update in FROM clause
  • LeetCode 热题100——链表专题
  • 植物花粉深度学习图片数据集大合集
  • 面试算法48:序列化和反序列化二叉树
  • 【Python基础】Python编程入门自学笔记,基础大全,一篇到底!
  • windows自动登陆
  • 5G及其后的5G非地面网络:趋势和研究挑战-HARQ部分
  • 【WPF系列】- XAML语法规范
  • antv/g6之图布局及切换布局
  • Wordpress plugin removes ‘/category‘
  • 【大数据基础平台】星环TDH社区集群版本部署
  • 【Java】汉诺塔
  • Java实现对Html文本的处理
  • Vue项目创建与启动(2023超详细的图文教程)
  • EtherCAT主站读取从站EEPROM抓包分析
  • Elasticsearch 8.X 如何生成 TB 级的测试数据 ?