将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。

1、将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。

接受端

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int main(int argc, const char *argv[])
{int rfd=socket(AF_INET,SOCK_DGRAM,0);handel_err("socket",rfd);//绑定struct sockaddr_in rin={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("255.255.255.255")};int res=bind(rfd,(struct sockaddr *)&rin,sizeof(rin));handel_err("bind",res);struct sockaddr_in client;socklen_t len=sizeof(client);//接收char buf[1024]="";while(1){bzero(buf,sizeof(buf));recvfrom(rfd,buf,sizeof(buf),0,(struct sockaddr *)&client,&len);printf("[%s:%d]->%s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf);}return 0;
}

发送端

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int main(int argc, const char *argv[])
{int oldfd=socket(AF_INET,SOCK_DGRAM,0);handel_err("oldfd",oldfd);//设置广播int k=1;setsockopt(oldfd,SOL_SOCKET,SO_BROADCAST,&k,sizeof(k));printf("广播设置成功\n");struct sockaddr_in broadcast={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("255.255.255.255") //广播IP};char buf[1024];while(1){fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;sendto(oldfd,buf,sizeof(buf),0,(struct sockaddr *)&broadcast,sizeof(broadcast));}close(oldfd);return 0;
}

2、使用多线程基于TCP协议的并发执行,一个服务器对应多个客户端实现通信实验。

客户端

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int main(int argc, const char *argv[])
{//套 链int cfd=socket(AF_INET,SOCK_STREAM,0);handel_err("socket",cfd);struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("192.168.238.227")};int res=connect(cfd,(struct sockaddr *)&server,sizeof(server));handel_err("connect",res);char buf[1024]="";while(1){printf("请输入>>");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;send(cfd,buf,sizeof(buf),0);recv(cfd,buf,sizeof(buf),0);}return 0;
}

服务器

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
//客户端信息
struct Info{int cfd;struct sockaddr_in client;socklen_t client_len;
};//子线程
void *fun(void *n){struct sockaddr_in client=(*(struct Info*)n).client;socklen_t client_len=(*(struct Info *)n).client_len;int cfd=(*(struct Info *)n).cfd;char buf[1024]="";while(1){int res=recv(cfd,buf,sizeof(buf),0);if(res==0){printf("下线\n");close(cfd);break;}printf("[%s:%d]->%s\n",inet_ntoa(client.sin_addr),htons(client.sin_port),buf);send(cfd,"收到\n",sizeof("收到\n"),0);}
}
int main(int argc, const char *argv[])
{//套 绑 监int sfd=socket(AF_INET,SOCK_STREAM,0);handel_err("socket",sfd);int k=1;setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&k,sizeof(k));struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("192.168.238.227")};int res=bind(sfd,(struct sockaddr *)&server,sizeof(server));handel_err("bind ",res);res=listen(sfd,10);handel_err("listen",res);//多线程操作struct sockaddr_in client;socklen_t client_len=sizeof(client);while(1){pthread_t tid;//接收int cfd=accept(sfd,(struct sockaddr *)&client,&client_len);printf("success\n");handel_err("accept",cfd);struct Info client_info={.cfd=cfd,.client=client,.client_len=client_len};//创建子线程pthread_create(&tid,NULL,fun,&client_info);//设置游离态pthread_detach(tid);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本算法——聚类

目录 创建工程 加载数据 聚类算法 评估 完整代码 结论 相比于有监督的分类器&#xff0c;聚类的目标是从一组未打标签的数据中识别相似对象组。它可 以用于识别同类群体的代表性样本&#xff0c;找到有用与合适的分组&#xff1b;或者找到不寻常的样本&#xff0c;比如 异…

uniapp中的条件编译

在script中 // #ifdef APP-PLUS console.log("11"); // #endif// #ifdef MP-WEIXIN console.log("22"); // #endif 在template中 <!-- #ifdef APP-PLUS --><view>哈哈哈</view> <!-- #endif --><!-- #ifdef MP-WEIXIN -->…

day21-ubuntu入门

小趣味docker 1.安装docker&#xff0c;从阿里云的yum yum install docker -y 2.需要提前准备好docker镜像&#xff0c;确保可用 docker -v 3.导入该游戏镜像&#xff08;先用systemctl start docker&#xff09; docker load < game_v2.tar 4.一条命令&#xff0c;在…

vue3 学习与实战

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

Three.js滚动画案例精选

今天为大家带来 3 个基于滚动动画的网站 Demo&#xff0c;它们不仅视觉效果惊艳&#xff0c;而且每个案例的源码都已开源在 GitHub&#xff0c;方便大家学习和借鉴&#xff01; 3D照片墙滚动 通过滚动操作实现 3D 网格效果以及动态过渡动画。这个案例使用了 GSAP 的 SplitTex…

地理数据库Telepg面试内容整理-描述你如何在GIS应用中使用空间数据进行分析并生成可视化结果

在 GIS(地理信息系统)应用中,使用空间数据进行分析并生成可视化结果是一项关键功能。空间数据的分析和可视化帮助用户理解地理现象、发现模式,并做出数据驱动的决策。以下是一个关于如何在 GIS 应用中使用空间数据进行分析并生成可视化结果的详细描述。 准备空间数据 在进行…

若依(spring-cloud)修改登陆密码加密算法

文章目录 前言一、解决办法二、解决过程1 为啥要改加密算法2 找不到校验代码 总结 前言 若依是一套快速集成各种中间件的配套 Java 后端框架&#xff0c;本文旨在描述修改其登陆的加密算法。文章的大前提是后端框架是若依哈&#xff0c;不是的话可以跳过了~&#xff01; 文章…

Flutter富文本实现学习

Flutter 代码如何实现一个带有富文本显示和交互的页面。 前置知识点学习 RealRichText RealRichText 和 ImageSpan 不是 Flutter 框架中内置的组件&#xff0c;而是自定义的组件或来自第三方库。这些组件的实现可以提供比标准 RichText 更丰富的功能&#xff0c;比如在富文本…

MBox20边缘计算网关助力各种数字化升级

在当今全球范围内数字化浪潮的强劲推动下&#xff0c;企业对数据处理与传输能力的需求正以前所未有的速度增长。制造业的心脏地带——工厂&#xff0c;其数字化转型已成为驱动生产效率飞跃、成本控制优化及竞争力显著提升的关键路径。在此过程中&#xff0c;明达技术MBox20边缘…

el-table动态行和列及多级表头

主页面 <template><div class"result-wrapper"><dynamic-table :table-data"tableData" :table-header"tableConfig" :tableTitle"tableTitle" :flowParams"flowParams"></dynamic-table></div…

RocketMQ(二)RocketMQ实战

文章目录 一、RocketMQ实战1.1 批量消息发送1.2 消息发送队列自选择1.3 事务消息1.4 SpringCloud集成RocketMQ 二、最佳实践2.1 生产者2.1.1 发送消息注意事项2.1.2 消息发送失败处理方式 2.2 消费者2.2.1 消费过程幂等2.2.2 消费打印日志 2.3 Broker 三、相关问题3.1 为什么要…

2-194基于matlab的四足机器人行走程序设计

基于matlab的四足机器人行走程序设计&#xff0c;正运动设计&#xff0c;逆运动学解算&#xff0c;步态设计。可定义机身高、步长、步高、一个摆相的市场等参数。输出四足机器人动态行走结果&#xff0c;及摆相示意图。程序已调通&#xff0c;可直接运行。 2-194基于matlab的四…

android studio android sdk下载地址

android studio安装后&#xff0c;因为公司网络原因&#xff0c;一直无法安装android sdk 后经过手机网络&#xff0c;安装android sdk成功如下&#xff0c;也可以手动下载后指定android sdk本地目录 https://dl.google.com/android/repository/source-35_r01.zip https://dl…

字符串和对象之间的转换

使用&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version> </dependency> public class Demo3 {public static void main(String[] args) {Person person …

conda常用维护命令

文章目录 1. 初始化和更新 Conda更新 Conda初始化 Conda&#xff08;如果需要&#xff09; 2. 管理环境创建新环境激活环境停用当前环境列出所有环境删除环境 3. 管理包安装包卸载包更新包更新所有包查找包列出已安装包 4. 导入导出环境导出环境配置从文件创建环境 5. 管理通道…

window如何将powershell以管理员身份添加到右键菜单?(按住Shift键显示)

window如何将powershell以管理员身份添加到右键菜单&#xff1f; 在 Windows 中&#xff0c;将 PowerShell 以管理员身份添加到右键菜单&#xff0c;可以让你在需要提升权限的情况下快速打开 PowerShell 窗口。以下是详细的步骤&#xff0c;包括手动编辑注册表和使用注册表脚本…

【NebulaGraph】变化的多跳查询

【NebulaGraph】变化的多跳查询 1. 需求2. 解决方案2.1 确定查询结构2.2 构建查询语句 3. 追加需求&#xff1a;如果增加每一跳都要指定查询某SPACE下的Tag&#xff0c;或者不查询某个Tag怎么办 1. 需求 存在多跳请求&#xff0c;其中每一跳是从上一跳查询结果为基础的。但是 …

【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容&#xff0c;就像使用..语法启动文件系统路径。例如&#xff…

华为ensp-BGP联盟

学习新思想&#xff0c;争做新青年&#xff0c;今天学习BGP联盟 实验介绍 一个BGP联盟是一个具有内部层次结构的AS。一个BGP联盟由若干个子AS 组成&#xff0c;子AS也称为成员AS。对于一个BGP联盟&#xff0c;其成员AS内部的各路由器之间需要建立全互联的IBGP邻居关系或使用B…

内部类(3)

大家好&#xff0c;今天我们继续来看看内部类&#xff0c;今天我们来学习一下内部类的分类&#xff0c;我们来看看一共有几种&#xff0c;它们有什么作用&#xff0c;那么话不多说&#xff0c;我们直接开始。 9.1 内部类的分类 先来看下,内部类都可以在一个类的哪些位置进行定…