TCP/UDP模型:2024/2/29

作业1:TCP模型

服务器端:

#include <myhead.h>
#define SER_IP "192.168.199.129"
#define SER_PORT 8899int main(int argc, const char *argv[])
{//1.创建用于连接的套接字文件int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}//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);//5.数据收发char sbuf[128]="";while(1){//清空数组bzero(sbuf,sizeof(sbuf));//接收客户端发来的消息int res=recv(newfd,sbuf,sizeof(sbuf),0);if(res==0){break;}//回复客户端发来的消息strcat(sbuf," !!!");send(newfd,sbuf,strlen(sbuf),0);}//6.关闭套接字文件close(newfd);close(sfd);return 0;
}

客户端:

#include <myhead.h>
#define SER_IP "192.168.199.129"
#define SER_PORT 8899int main(int argc, const char *argv[])
{//1.创建用于通信的套接字int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}//2.连接服务器//填充地址信息结构体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;}//3.进行数据的收发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);}//4.关闭套接字close(cfd);return 0;
}

效果图:

作业2:UDP模型

服务器端:

#include <myhead.h>
#define SER_IP "192.168.199.129"
#define SER_PORT 9988
int main(int argc, const char *argv[])
{//1.创建用于通信的套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}printf("socket success\n");//2.绑定端口号//填充地址信息结构体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.进行数据收发//定义客户端地址信息结构体struct sockaddr_in cin;socklen_t socklen=sizeof(cin);char rbuf[128]="";while(1){//清空数组bzero(rbuf,sizeof(rbuf));//读取客户端信息recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&socklen);printf("收到的消息为:%s\n",rbuf);if(strcmp(rbuf,"quit")==0){break;}//向客户端回复消息strcat(rbuf," !!!");sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,socklen);}//4.关闭套接字close(sfd);return 0;
}

客户端:

#include <myhead.h>
#define SER_IP "192.168.199.129"
#define SER_PORT 9988
int main(int argc, const char *argv[])
{//1.创建用于通信的套接字int cfd=socket(AF_INET,SOCK_DGRAM,0);if(cfd==-1){perror("socket error");return -1;}//数据收发char wbuf[128]="";//填充地址信息结构体struct sockaddr_in sin;socklen_t socklen=sizeof(sin);sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);while(1){//清空数组bzero(wbuf,sizeof(wbuf));//从终端获取数据printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]='\0';//将数据发送到服务端sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,socklen);printf("发送成功\n");if(strcmp(wbuf,"quit")==0){break;}//接收从服务端回复的消息recvfrom(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,&socklen);printf("接收到的消息为:%s\n",wbuf);}//关闭套接字close(cfd);return 0;
}

效果图:

作业3:思维导图

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

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

相关文章

docker save 命令 docker load 命令 快速复制容器

docker save 命令 docker load 命令 1、docker save 命令2、docker load 命令 1、docker save 命令 docker save 命令用于在系统上把正在使用的某个容器镜像 导出成容器镜像文件保存下载&#xff0c;以便在其他系统上导入这个容器镜像文件 以便快速在其他服务器上启动相同的容…

16. QML中的一些粒子特效

1.说明 在使用unity开发游戏时&#xff0c;都会涉及到一些特效的开发。实际上在QML中也提供了一些可以做特效的控件&#xff0c;称之为粒子系统。本篇博客主要记录一些使用粒子做特效的方式。 特效–火焰效果&#xff1a; 2. 案例汇总 2.1 案例1 效果展示&#xff1a; 粒子…

一文速览深度伪造检测(Detection of Deepfakes):未来技术的守门人

一文速览深度伪造检测&#xff08;Detection of Deepfakes&#xff09;&#xff1a;未来技术的守门人 前言一、Deepfakes技术原理卷积神经网络&#xff08;CNN&#xff09;&#xff1a;细致的艺术学徒生成对抗网络&#xff08;GAN&#xff09;&#xff1a;画家与评审的双重角色…

数仓模型设计方法论

在当今大数据时代&#xff0c;数据已经成为企业最重要的资产之一。而数据仓库作为企业数据管理和分析的核心基础设施&#xff0c;其设计方法论对于企业的数据治理和决策分析至关重要。本文将探索数仓模型设计的方法论&#xff0c;帮助读者更好地理解和应用数仓模型设计。 一、…

LeetCode 刷题 [C++] 第102题.二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 题目分析 题目中要求层序遍历二叉树&#xff0c;即二叉树的广度优先搜索(BFS)。BFS一般使用队列的先入先出特性实现&#…

服了,阿里云服务器价格和腾讯云1元之差,如何选择?

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器62元一年&#xff0c;2核2G3M、2核4G、4核8G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配置价格表…

一图总结:华为销售体系(铁三角组织LTC流程)

《华为铁三角工作法》阅读了多遍&#xff0c;花了些时间整理了一张图对本书的框架性总结&#xff0c;从流程&#xff08;LTC&#xff09;、组织&#xff08;铁三角&#xff09;、激励和管理三个大方面概览华为销售体系。 核心是一靠流程&#xff0c;二靠团队&#xff0c;而前提…

RT-Thread studio上创建一个STM32F103的CAN通讯功能

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

【MySQL】MVCC机制

引入问题 首先看下面这张图&#xff0c;假如说一条数据经过了事务 2、3、4&#xff0c;到事务 5 的时候&#xff0c;进行两次查询&#xff0c;那这两次查询分别查询的是哪个事务版本的记录呢&#xff1f; 这就是我们要解决的问题&#xff0c;那么MVCC机制也就是为了解决这个问…

力扣hot100题解(python版29-32题)

29、删除链表的倒数第N个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&a…

金三银四,自动化测试面试题精选【美团二面】

面试一般分为技术面和hr面&#xff0c;形式的话很少有群面&#xff0c;少部分企业可能会有一个交叉面&#xff0c;不过总的来说&#xff0c;技术面基本就是考察你的专业技术水平的&#xff0c;hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求&#xff0c;一般来…

Decision Transformer

DT个人理解 emmm, 这里的Transformer 就和最近接触到的whisper一样,比起传统Transformer,自己还设计了针对特殊情况的tokens。比如whisper里对SOT,起始时间,语言种类等都指定了特殊tokens去做Decoder的输入和输出。 DT这里的作为输入的Tokens由RL里喜闻乐见的历史数据:…