TCP/UDP实现网络通信

TCP实现网络通信

1.服务端

#include<myhead.h>//1服务端定义:端口号\id号
#define SER_PIPR 6666
#define SER_IP "196.168.111.186"   //通过ifconfig查看ip
int main(int argc, const char *argv[])
{//1创建套接字int sfd =socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}//2.将端口号快速重用int reuse=1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1){perror("setsockipt error");return -1;}//2为套接字绑定端口号和ip//2.1填充地址结构体struct sockaddr_in sin;sin.sin_family=AF_INET;   //通信域名sin.sin_port=htons(SER_PIPR);  //端口号sin.sin_addr.s_addr=inet_addr(SER_IP);  //IP地址//2.2绑定工作if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}//3.将套接字设置成被动监听状态if(listen(sfd,128)==-1){perror("listen error");return -1;}//4.阻塞等待客户的连接请求//4.1定义勇于接收客户端的信息struct sockaddr_in cin;//用于接收地址信息socklen_t addrlen = sizeof(cin);  //用于接收长度//4.2接收连接int newfd= accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd==-1){perror("accept error");return -1;}printf("[%s:%d]:已成功连接一个客户端\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5.数据的收发char buf[128]="";while(1){//清空容器bzero(buf,sizeof(buf));//从可读端读取信息int res=recv(newfd,buf,sizeof(buf),0);if(res==-1){perror("recv error");return -1;}else if(res == 0){printf("客户端已经下线\n");close(newfd);break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);//对收到的消息进行一顿操作strcat(buf,"*_*");//将消息回复给客户端if(send(newfd,buf,strlen(buf),0)==-1){perror("发送error");return -1;}printf("发送成功\n");}//关闭监听close(sfd);return 0;
}

2.客户端

     1	#include<myhead.h>2	#define SER_PORT  6666 //与服务器保持一致3	#define SER_IP    "192.168.111.186"   //服务器ip地址4	5	#define CLI_PORT   8888  //客户端端口号6	#define CLI_IP    "192.168.111.186"    //客户端ip地址7	int main(int argc, const char *argv[])8	{9		//1.创建用于通信的套接字文件描述符10		int cfd=socket(AF_INET,SOCK_STREAM,0);11		if(cfd==-1)12		{13			perror("socket error");14			return -1;15		}16		printf("cfd = %d",cfd);17		//2.绑定ip地址和端口号18		//2.1填充地址信息结构体19		struct sockaddr_in cin;20		cin.sin_family = AF_INET;  //通信域21		cin.sin_port = htons(CLI_PORT); //端口号22		cin.sin_addr.s_addr = inet_addr(CLI_IP);   //ip地址23	24		//2.2绑定工作25		if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)26		{27			perror("bind error");28			return -1;29		}30		printf("bind success\n");31		32		//3.连接到服务器33		//3.1填充服务器地址信息结构体34		struct sockaddr_in sin;35		sin.sin_family=AF_INET;  //服务器的通信域36		sin.sin_port= htons(SER_PORT); //服务器端口号37		sin.sin_addr.s_addr=inet_addr(SER_IP);   //服务器ip地址38	39		//3.2连接服务器40		if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)41		{42			perror("connect error");43			return -1;44		}45		printf("连接服务器成功\n");46		//4.数据收发47		char buf[128]="";48		while(1)49		{50			printf("请输入>>>");51			fgets(buf,sizeof(buf),stdin);  //从终端获取字符串52			buf[strlen(buf)-1]=0;53	54			//将数据发送给服务器55			send(cfd,buf,strlen(buf),0);56			printf("发送成功\n");57	58			//清空容器59			bzero(buf,sizeof(buf));60	61			//接受服务器发来的的数据62			recv(cfd,buf,sizeof(buf),0);63	64			printf("收到服务器消息为:%s\n",buf);65	66		}67	68		//5.关闭套接字69		close(cfd);70		71		return 0;72	}

UDP实现网路通信

1.服务端

     1	#include<myhead.h>2	#define SER_PORT 9999  //服务器端口号3	#define SER_IP "192.168.111.186"  //服务器ip地址4	int main(int argc, const char *argv[])5	{6		//创建用于通信的服务器套接字描述符7		int sfd = socket(AF_INET,SOCK_DGRAM,0);8		if(sfd==-1)9		{10			perror("socket error");11			return -1;12		}13	14		printf("sfd = %d\n",sfd);15	16		//将端口号快速重用17		int resuse = 1;18		if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&resuse,sizeof(resuse))==-1)19		{20			perror("setsockopt error");21			return -1;22		}23	24		printf("将端口号快速重用成功\n");25	26		//2.绑定ip地址和端口号27		//2.1填充地址信息结构体28		struct sockaddr_in sin;29		sin.sin_family = AF_INET;   //通信域30		sin.sin_port = htons(SER_PORT);   //端口号31		sin.sin_addr.s_addr = inet_addr(SER_IP);  //IP地址32		//2.2绑定工作33		if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)34		{35			perror("bind error");36			return -1;37		}38	39		//3.数据收发40		char buf[128]="";41		struct sockaddr_in cin;             //接受对端地址信息42		socklen_t addrlen = sizeof(cin);     //接收地址长度43		while(1)44		{45			//清空容器46			bzero(buf,sizeof(buf));47	48			//从套接字中读取数据49			recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);50			printf("收到的消息为:%s\n",buf);51	52			//收到的消息进行处理53			strcat(buf,"*_*");54	55			if(sendto(sfd,buf,strlen(buf),0,(struct sockaddr*)&cin,sizeof(cin))==-1)56			{57				perror("发送error");58				return -1;59			}60			printf("发送成功\n");61		}62		//4.关闭文件描述符63	64		return 0;65	}

2.客户端

思维导图:

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

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

相关文章

深度解析Edge SCDN与CDN:安全加速,全面防护

在现代互联网应用中&#xff0c;CDN已成为提高网站和应用性能不可或缺的技术之一。然而&#xff0c;随着网络安全威胁的日益严峻&#xff0c;单纯依靠CDN提供的加速服务已经不足以满足企业的安全需求。因此&#xff0c;Edge SCDN出现了&#xff0c;它不仅具备CDN的加速特性&…

解锁客户增长新密码:“老带新”策略的深度剖析与实战指南

客户推荐是什么&#xff0c;为何那么重要&#xff1f; 客户推荐是指满意的客户自愿地将其认为优质的产品或服务推荐给他们的社交网络成员&#xff0c;如朋友、家人或同事&#xff0c;这种推荐行为可以是自发的口碑传播&#xff0c;也可以是通过产品方推出的“老带新”奖励计划来…

OpenCV图像滤波(12)图像金字塔处理函数pyrDown()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数主要是对图像进行模糊处理并将其降采样。 默认情况下&#xff0c;输出图像的大小计算为 Size((src.cols1)/2, (src.rows1)/2)&#xff0c;但…

汽车维修预约服务系统的设计与实现

TOC springboot317汽车维修预约服务系统的设计与实现 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔…

【大模型】多模态的原理简述

多模态的原理 多模态模型目前基本就是文生图、图生图、图生视频、文生视频这些&#xff0c;其底层逻辑其实还是先从生图片这一源头。因为毕竟视频也是若干帧的图片组成。 所以在生图片的这个环节上&#xff0c;我们把比较火的这个stablediffusion用的这个diffusion扩散模型理…

第T8周:使用TensorFlow实现猫狗识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前期工作1.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据 二、数据预处理1、加载数据2、再次检查数据3. 配置数据集4…

mysql写个分区表

因为表量已经达到1个亿了。现在想做个优化&#xff0c;先按照 create_time 时间进行分区吧。 create_time 是varchar类型。 CREATE TABLE orders (id varchar(40) NOT NULL ,order_no VARCHAR(20) NOT NULL,create_time VARCHAR(20) NOT NULL,amount DECIMAL(10,2) NOT NULL,…

springboot使用aop或Jackson进行数据脱敏

1.aop 启动类加EnableAspectJAutoProxy 自定义注解&#xff0c;在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截&#xff0c;这种我试了&#xff0c;拦截不住。猜测在mvc返…

FPGA开发——UART回环实现之接收模块的设计

一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端&#xff0c;所以在接收和发送模块中先编写接收模块&#xff0c;这样可以在后面更好的进行发送模块的验证。&#xff08;其实这里先编写哪个模块&#xff09;都不影响&#xff0c;这里看自己心情&#xff0c;反…

【SpringBoot】【autopoi】java生成word,基于模版生成(文本、图片、表格)

基于模版生成word 1、引入maven2、word模版编写3、java代码4、效果5、word转pdf AutoPoi的主要特点 参考文献 https://help.jeecg.com/autopoi/autopoi/prequel/test.html 1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.spring mvc支持,web导出可以…

【ubuntu24.04】远程开发:微软RDP;ssh远程root登录;clion以root远程

本地配置了一台ubutnu服务器,运行各种服务。偶尔会远程过去,做一些UI操作。感觉nomachine的就是会模糊一些,可能是默认的编码比较均衡?RDP更清晰? RDP 与nomachine比,更清晰,但是貌似不支持自动缩放窗口?默认的配置就比较高:GPT的建议 安装xrdp还要配置session:1. 安…

Git 课程任务

安装好git 写自我介绍 配置完git&#xff0c;进行提交 创建个人仓库 添加链接 本地提交到远程仓库

leetcode198打家劫舍

题目描述 LeetCode 第 198 题——打家劫舍&#xff08;House Robber&#xff09; 你是一个职业小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;这个地方所有的房屋都围成一圈&#xff0c;并且相邻的房屋有安全系统会相连&#xff0c;如果两间相邻的…

【C++高阶】哈希—— 位图 | 布隆过滤器 | 哈希切分

✨ 人生如梦&#xff0c;朝露夕花&#xff0c;宛若泡影 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&am…

C++竞赛初阶L1-11-第五单元-for循环(25~26课)519: T454430 人口增长问题

题目内容 假设目前的世界人口有 x 亿&#xff0c;按照每年 0.1% 的增长速度&#xff0c;n 年后将有多少人&#xff1f; 输入格式 一行两个正整数 x 和 n&#xff0c;之间有一个空格。其中&#xff0c;1≤x≤100,1≤n≤100。 输出格式 一行一个数&#xff0c;表示答案。以亿…

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…

使用ITextRenderer导出PDF后无法打开问题,提示‘无法打开此文件‘

依赖如下 <!-- https://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf --> <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>9.1.22</version> &l…

6.MySQL的增删改查

目录 Create 单行插入数据 全列插入 多行数据指定列插入 插入否则更新 主键冲突 唯一键冲突 &#xff08;☆&#xff09; 替换数据 Retrieve Select列 全列查询 指定列查询 查询字段为表达式 where条件 NULL 的查询 NULL 和 NULL 的比较&#xff0c; 和 <>…

如何选择图片和视频

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何选择视频文件"相关的内容&#xff0c;本章回中将介绍如何混合选择图片和视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

Vue3学习 Day01

创建第一个vue项目 1.安装node.js cmd输入node查看是否安装成功 2.vscode开启一个终端&#xff0c;配置淘宝镜像 # 修改为淘宝镜像源 npm config set registry https://registry.npmmirror.com 输入如下命令创建第一个Vue项目 3.下载依赖&#xff0c;启动项目 访问5173端口 …