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

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;比如 异…

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…

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 …

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;其中每一跳是从上一跳查询结果为基础的。但是 …

华为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 内部类的分类 先来看下,内部类都可以在一个类的哪些位置进行定…

【Python】ftp和sftp工具类,使用python实现文件的上传与下载

文章目录 1. ftp工具类2. sftp工具类 1. ftp工具类 编写ftp工具类&#xff0c;我这里取名为 ftp_util.py import os from ftplib import FTPclass FtpUtil:def __init__(self, ip, username, password, port21):self.ip ipself.username usernameself.password passwordse…

Airbnb/Booking 系统设计(high level architecture)

原文地址 CodeKarle: Airbnb System Design | Booking.com System Design B站搜 “Airbnb System Design” 有视频版本 需求&#xff1a; 功能性需求 系统用户包括商家和客人。 Hotel - 商家&#xff08;拥有hotel的人&#xff09; onboarding - 商家可以入住系统。 update…

【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口

前言 前几年WPS还可以免费处理5页以内的PDF转excel&#xff0c;现在必须付费了&#xff0c;而且其他在线的PDF转excel都是要收费的&#xff0c;刚好前几年调研过百度OCR的高精度含位置接口&#xff0c;依然是每天可以免费调用50次&#xff0c;本篇是基于此接口&#xff0c;开发…

Vscode左大括号不另起一行、注释自动换行

参考大佬的博客VSCode 格式化 cpp 文件时配置左大括号不换行_vscode大括号不换行-CSDN博客 Clang_format_style {BasedOnStyle: Chromium, IndentWidth: 4}

原神新角色玛薇卡配队攻略 原神玛薇卡技能机制

原神在2025年1月1日即将迎来一次版本更新&#xff0c;玛薇卡、茜特菈莉、蓝砚三名角色即将上线&#xff0c;今天就给大家抢先介绍一下玛薇卡的机制和配队。 技能机制 战技挂火&#xff1a;战技不用充能就可以输出&#xff0c;但是挂火频率和范围比香菱低一些&#xff0c;适合搭…

8086汇编(16位汇编)学习笔记10.寄存器总结

8086汇编(16位汇编)学习笔记10.寄存器总结-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 寄存器 8086CPU有14个寄存器 它们的名称为&#xff1a; AX、BX、CX、DX、SI、DI、SP、BP、 IP**、CS、DS、ES、**SS、PSW。 8086CPU所有的寄存器都是16位的&#…