40、网络编程/TCP和UDP通信模型练习20240229

一、使用TCP模型创建服务器和客户端完成简单通信。

服务器代码:

#include<myhead.h>
#define SER_IP "192.168.32.130"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{//1.创建监听的套接字int sfd=-1;sfd=socket(AF_INET,SOCK_STREAM,0);//参数1表示使用的是ipv4的通信//参数2表示使用tcp通信类型//表示前面以及特定了通信协议if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//2.绑定ip地址和端口号struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3.启动监听 允许客户端链接if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success\n");//4.当有客户端发来连接请求后 创建新的用于通信的套接字struct sockaddr_in cin;socklen_t socklen=sizeof(cin);int newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd==-1){perror("accept error");return -1;}printf("newfd=%d 有新客户以及上线\n",newfd);printf("客户端IP:%s,端口:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5.通信套接字和客户端进行数据收发char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));int res=recv(newfd,rbuf,sizeof(rbuf),0);if(res==0){puts("客户端已下线");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);strcat(rbuf,"*_*");send(newfd,rbuf,strlen(rbuf),0);}//6.关闭套接字close(newfd);close(sfd);return 0;
}

客户端代码:

#include<myhead.h>
#define SER_IP "192.168.32.130"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd =socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.绑定(非必须)	//3.链接服务器struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//4.数据收发char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;send(cfd,wbuf,strlen(wbuf),0);printf("发送成功\n");if(strcmp(wbuf,"quit")==0)break;bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf),0);printf("收到消息:%s\n",wbuf);}//5.关闭套接字close(cfd);return 0;
}

运行:

二、使用UDP模型 创建服务器和客户端完成简单通信。

服务器代码:

#include<myhead.h>
#define SER_IP "192.168.32.130"
#define SER_PORT 6666
int main(int argc, const char *argv[])
{//创建套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}//定义通用地址结构体存入服务器地址信息struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//绑定端口号和ipif(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}//定义通用地址结构体用来获取发来信息的对端地址struct sockaddr_in cin;socklen_t cinlen=sizeof(cin);char sbuf[128]="";while(1){bzero(sbuf,sizeof(bzero));//接收信息并获取对方地址recvfrom(sfd,sbuf,sizeof(sbuf),0,(struct sockaddr*)&cin,&cinlen);printf("收到消息:%s\n",sbuf);strcat(sbuf,"*_*");//回复信息sendto(sfd,sbuf,sizeof(sbuf),0,(struct sockaddr*)&cin,cinlen);}close(sfd);//关闭套接字文件return 0;
}

客户端代码:

#include<myhead.h>
#define SER_IP "192.168.32.130"//客户端ip
#define SER_PORT 6666   //客户端端口号
int main(int argc, const char *argv[])
{int rfd=socket(AF_INET,SOCK_DGRAM,0);//创建套接字if(rfd==-1){perror("socket error");return -1;}//将服务器的信息存入地址通用结构体struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);char sbuf[128]="";while(1){bzero(sbuf,sizeof(sbuf));printf("请输入>>>:");fgets(sbuf,sizeof(sbuf),stdin);sbuf[strlen(sbuf)-1]=0;//发送信息给服务器sendto(rfd,sbuf,sizeof(sbuf),0,(struct sockaddr*)&sin,sizeof(sin));bzero(sbuf,sizeof(sbuf));//接收对端服务器回复的信息 不接收对端地址信息recvfrom(rfd,sbuf,sizeof(sbuf),0,NULL,NULL);printf("收到信息:%s\n",sbuf);}close(rfd);//关闭套接字return 0;
}

运行:

思维导图:

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

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

相关文章

解决 MySQL 未运行但锁文件存在的问题

查看mysql状态时&#xff0c;显示错误信息"ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists"。 解决步骤 1、检查 MySQL 进程是否正在运行 在继续之前&#xff0c;我们首先需要确定 MySQL 进程是否正在运行。我们可以使用以下命令检查…

港中文联合MIT提出超长上下文LongLoRA大模型微调算法

论文名称&#xff1a; LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models 文章链接&#xff1a;https://arxiv.org/abs/2309.12307 代码仓库&#xff1a; https://github.com/dvlab-research/LongLoRA 现阶段&#xff0c;上下文窗口长度基本上成为了评估…

算法修炼-动态规划之路径问题(1)

62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;选定一个网格为终点&#xff0c;走到这个网格的所有走法就是这个网格的上面一个网格的所有走法加上这个网格左边一个网格的所有走法&#xff0c;然后做好初始化工作就行。 class Solution { public:int…

MATLAB环境下基于偏置场校正的改进模糊c-均值聚类图像分割算法

基于聚类的分割方法是以统计学为基础提出的一种分割方法。其实质是通过计算像素与每一类聚类中心的欧氏距离来判定像素与每一类聚类中心的相似性&#xff0c;距离近就说明像素与聚类中心相似性大&#xff0c;反之相似性小。基于一定标准下的相似性自动划分成若干个子集(类)&…

【无标题】TMGM官网平台切尔西足球俱乐部合作

TMGM作为一家在三大洲均设有办事处的行业领导者&#xff0c;TMGM 被视为可靠的差价合约交易提供商&#xff0c;其重点是监管合规、技术创新与他联系➕&#x1f6f0;️TMGM818卓越的客户服务。 切尔西足球俱乐部在亚太地区拥有庞大的球迷群体&#xff0c;并在该地区建立了多种亚…

2024年腾讯云优惠政策_腾讯云TOP10优惠活动

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

AOP案例(黑马学习笔记)

需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 ● 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0c;需要详细的操作日志&#xff0c;并保存在数据表中&#xff0c;便于后期数据追踪。 操作日志信息包含&#xff1a; ●…

IO多路转接

1.select 初识select 系统提供 select 函数来实现多路复用输入 / 输出模型 . select 系统调用是用来让我们的程序监视多个文件描述符的状态变化的 ; 程序会停在 select 这里等待&#xff0c;直到被监视的文件描述符有一个或多个发生了状态改变 ; select函数模型 select的函…

服务器硬件得基础知识介绍

服务器硬件是计算机硬件的一种&#xff0c;专门用于构建服务器系统。服务器硬件通常具有高性能、高可靠性和可扩展性等特点&#xff0c;以满足企业级应用的需求。本文将从以下几个方面介绍服务器硬件的基础知识&#xff1a;服务器概述、CPU、内存、存储、网络、电源和散热、服务…

【机器学习】CIFAR-10数据集简介、下载方法(自动)

【机器学习】CIFAR-10数据集简介、下载方法(自动) &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和支…

0904多元复合函数求导-多元函数微分法及其应用

文章目录 1 复习一元函数复合函数求导2 一元函数与多元函数复合的情形3 多元函数与多元函数复合的情形4 其他情形5 抽象复合函数求导6 全微分不变性结语 1 复习一元函数复合函数求导 y f ( u ) , u ϕ ( x ) ⇒ f [ ϕ ( x ) ] d y d x d y d u ⋅ d u d x f ′ ( u ) ⋅ ϕ…

Python正则表达式:从基础到高级应用的全面总结与实战【第103篇—JSON模块】

Python正则表达式&#xff1a;从基础到高级应用的全面总结与实战 正则表达式是一种强大的文本匹配和处理工具&#xff0c;广泛应用于文本处理、数据抽取、表单验证等领域。本文将从正则表达式的基础知识出发&#xff0c;逐步深入&#xff0c;最终结合代码实战&#xff0c;带你…

赵文彬将出席无磷锅炉工艺助剂在锅炉水节水节能应用

演讲嘉宾&#xff1a;赵文彬 集团副总/技术总监 上远未来水务集团有限公司 演讲题目&#xff1a;无磷锅炉工艺助剂在锅炉水节水节能方面的应用 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&a…

mac 安装hbuilderx

下载 HBuilderX下载地址: 下载地址 选额mac版本点击下载 安装 如图&#xff0c;将HBuilderX拖到Applications&#xff0c;才是正确的安装姿势。 MacOSX&#xff0c;软件必须安装到/Applications目录&#xff0c;如未安装到此目录&#xff0c;可能会出现插件安装失败、项目创建…

Linux中的动静态库

目录 一、静态库 &#xff08;1&#xff09;静态库的优缺点&#xff1a; &#xff08;2&#xff09;Linux下静态库的创建和执行 1.直接编译​编辑 2.指定路径和库名 3.用LIBRARY_PATH环境变量来配置路径 二、动态库 &#xff08;1&#xff09;动态库的优缺点 &#xff…

javaweb请求与响应

前言 前面介绍了对应的服务器端的相关代码。这里开始学习服务器端与客户端的数据请求与响应 这里的仅仅是一个简单的调用&#xff0c;并没有经过servelert接口来进行调用&#xff0c;同前面的一样&#xff0c;我们介绍对应的本地服务器进行的部署项目。 代码 //属于简单的不…

Scratch 第十三课-飞机大战游戏

第十三课-飞机大战游戏 学习目标 这节课我们做一款大家都爱玩的飞机大战游戏&#xff0c;学习重点&#xff1a; 如何导入外部角色如何让飞机发射子弹鼠标控制角色移动 程序设计 程序分析 &#xff1a; 飞机大战游戏相信很多小朋友都玩过&#xff0c;我方飞机在下方&#xf…

LabVIEW石油钻机提升系统数字孪生技术

LabVIEW石油钻机提升系统数字孪生技术 随着数字化、信息化、智能化的发展&#xff0c;石油钻采过程中的石油钻机数字化技术提升成为了提高钻井效率、降低生产成本的重要途径。基于中石油云平台提供的数据&#xff0c;采用数字孪生技术&#xff0c;对石油钻机提升系统进行数字化…

[Redis]——初识Redis

一、Redis为非关系型数据库 ❓我们常见的MySQL、SQLServer都是关系型数据库&#xff0c;那他们之间有什么区别与联系呢&#xff1f; &#x1f4d5;关系型数据库与非关系型数据库的区别&#xff08;面试题&#xff09; 解释&#xff1a; SQL数据库中的表是有结构的&#xff0c;包…

腾讯云学生云服务器_学生云主机_学生云数据库_云+校园特惠套餐

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…