2024/03/14(网络编程·day2)
一、思维导图
二、TCP通信
//服务器
#include<myhead.h>#define SER_PORT 8888 //服务器端口号
#define SER_IP "192.168.117.103" //服务器IP
int main(int argc, const char *argv[])
{//1、创建一个套接字int sfd = -1;sfd = socket(AF_INET,SOCK_STREAM,0);//参数1:表示创建的是网络通信的套接字//参数2:表示使用的是TCP通信协议//参数3:参数2指定了协议,参数3填0即可if(sfd == -1){perror("socket error");return -1;}printf("%d success sfd = %d\n",__LINE__,sfd); //3//设置端口号快速重用int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");//2、绑定IP和端口号//2.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); //IP地址//2.2绑定if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("%d bind success\n",__LINE__);//3、将套接字设置成被监听状态if(listen(sfd,128) == -1){perror("listen error");return -1;}//4、阻塞等待客户端的连接请求int newfd = -1;//定义结构体变量接受客户端地址信息结构体struct sockaddr_in cin;//接收客户端信息结构体socklen_t addrlen = sizeof(cin);//接收客户端结构体大小if((newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen)) == -1){perror("accept error");return -1;}printf("[%s %d]请求连接\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5、收发数据char rbuf[128] = "";//接收客户端发送的信息while(1){//将容器清空bzero(rbuf,sizeof(rbuf));//memset(rbuf,0,sizeof(rbuf));//从套接字中读取数据int res = recv(newfd,rbuf,sizeof(rbuf)-1,0);if(res == 0){printf("客户端已下线\n");break;}printf("[%s %d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);//加个收到再回回去strcat(rbuf," <Got it>!");send(newfd,rbuf,strlen(rbuf),0);printf("回复成功\n"); }//6、关闭服务器close(newfd);close(sfd);return 0;
}
//客户端
#include<myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.117.103"
#define CLI_PORT 9999
#define CLI_IP "192.168.117.103"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("socket sucess cfd = %d\n",cfd); //3//设置端口号快速重用int reuse = 1;if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("socket error");return -1;}printf("端口号快速重用成功\n");//2、绑定端口号和IP地址(非必须)//2.1填充客户端地址信息结构体struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(CLI_PORT);cin.sin_addr.s_addr = inet_addr(CLI_IP);//2.2、绑定端口号和IPif(bind(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1){perror("bind error");return -1;}printf("bind success\n");//3、连接服务器//3.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); //服务器IP地址//3.2、连接服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("connect error");return -1;}printf("连接成功\n");//4、收发数据char wbuf[128] = "";while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin); //从终端上获取一个字符串wbuf[strlen(wbuf)-1] = '\0'; //将换行换成 '\0'//判断输入的字符串值if(strcmp(wbuf,"quit") == 0){break;}//将数据发送给服务器send(cfd,wbuf,strlen(wbuf),0);//将字符数据清空bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf)-1,0);printf("收到的服务器消息为:%s\n",wbuf);}//5、关闭套接字close(cfd);return 0;
}
客户端连接服务器
三、UDP通信
//服务器
#include<myhead.h>
#define SER_PORT 6666
#define SER_IP "192.168.117.103"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 sfd = %d\n",sfd); //3//设置端口号快速重用int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");//2、绑定IP地址和端口号//2.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);//2.2、绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}//3、收发数据char rbuf[128] = "";//定义接收对端地址信息结构体的容器struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);while(1){//清空容器bzero(rbuf,sizeof(rbuf));//接收数据recvfrom(sfd,rbuf,sizeof(rbuf)-1,0,(struct sockaddr*)&cin,&addrlen);printf("[%s:%d] : %s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);//回复strcat(rbuf," <Got it!>");if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cin,sizeof(cin)) == -1){perror("write error");return -1;}printf("回复成功\n");}//4、关闭套接字close(sfd);return 0;
}
//客户端
#include<myhead.h>
#define SER_PORT 6666
#define SER_IP "192.168.117.103"
#define CLI_PORT 7777
#define CLI_IP "192.168.117.103"
int main(int argc, const char *argv[])
{//1、创建用于通信的套接字文件描述符int cfd = socket(AF_INET,SOCK_DGRAM,0);if(cfd == -1){perror("socket error");return -1;}printf("socket success cfd = %d\n",cfd);//2、绑定IP地址和端口号//2.1填充客户端地址信息结构体struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(CLI_PORT);cin.sin_addr.s_addr = inet_addr(CLI_IP);//2.2、绑定if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1){perror("bind error");return -1;}printf("bind success\n");//3、数据收发char wbuf[128] = "";//填充服务器端地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin); //从终端获取一个字符串wbuf[strlen(wbuf)-1] = 0; //将换行换成'\0'//判断输入的是否为退出if(strcmp(wbuf,"quit") ==0){break;}//将数据发送给服务器sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("发送成功\n");//接收服务器发送来的消息bzero(wbuf,sizeof(wbuf)); //清零read(cfd,wbuf,sizeof(wbuf)-1);printf("收到服务器的消息为:%s\n",wbuf);}//4、关闭套接字close(cfd);return 0;
}
客户端连接服务器
相关文章:

2024/03/14(网络编程·day2)
一、思维导图 二、TCP通信 //服务器 #include<myhead.h>#define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.117.103" //服务器IP int main(int argc, const char *argv[]) {//1、创建一个套接字int sfd -1;sfd socket(AF_INET,SOCK_STREAM,…...

2024最新陪诊小程序/医院陪诊滴嗒陪诊小程序源码-陪护服务平台陪诊师陪
.系统介绍: 陪护小程序、微信陪诊、、ThinkPHP框架、ThinkPHP6框架、FastAdmin框架、微信小程序。 嘀嗒陪诊小程序功能相对简单,后台也简捷,如果只是做个陪诊服务的小程序也基本能满足了,整体测试了未发现BUG,小程序端也能正常为使用,用户授权接口是老的。 应用背景:人…...

基于单片机的温度控制系统设计
基于单片机的温度控制系统设计 摘要: 最近这些年,随着科学技术的不断发展和进步,单片机技术通过在各行各业中的应用也日臻完善。而温度测控系统也因单片机所特有的强大处理能力、功耗低以及体积小等优点向着小型化和智能化发展。本设计以STC89C52单片机…...

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解
Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…...

Tomcat详解
1Tomcat安装 下载 Tomcat:首先,您需要从 Tomcat 官方网站(http://tomcat.apache.org)下载适合您系统的最新版本的 Tomcat 软件包。通常情况下,您会选择一个稳定的版本进行下载。解压缩:下载完成后…...

SpringCloudAlibaba 网关gateway整合sentinel日志默认路径修改
SpringCloudAlibaba 网关gateway整合sentinel 实现网关限流熔断 问题提出 今天运维突然告诉我 在服务器上内存满了 原因是nacos日志高达3G,然后将日志文件发给我看了一下之后才发现是gateway整合sentinel使用了默认日志地址导致日志生成地址直接存在与根路径下而且一下存在多…...

#LLM入门|Prompt#3.3_存储_Memory
在与语言模型交互时,一个关键问题:记忆缺失使得对话缺乏真正的连续性。 因此,接下来介绍 LangChain 中的储存模块,即如何将先前的对话嵌入到语言模型中的,使其具有连续对话的能力。 当使用 LangChain 中的储存(Memory)…...

基于SSM+Vue的龙腾公司员工信息管理系统设计与实现
1 绪论 1.1研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前&a…...

使用点链云管家创建瑜伽约课小程序
点链云管家 点链云管家是由上海点链科技开发的门店管理系统,为线下门店商家提供一站式门店运营服务平台解决方案,适用于瑜伽健身、美业、新零售会员制电商、母婴店、宠物店、按摩养生、服装、美容、美甲、汽车服务、商超零售、餐饮、KTV娱乐、干洗等18个…...

【Node.js从基础到高级运用】八、Express 框架入门
Express 框架入门 Express 是一个灵活且广泛使用的 Node.js web 应用框架,它提供了一系列强大特性来帮助开发者创建各种 Web 和移动设备应用。在这一节中,我们将介绍如何安装和配置 Express,并简单探讨其路由和中间件的概念。 安装 Express…...

Unity Timeline学习笔记(2) - PlayableTrack
PlayableTrack 是可自定义播放的轨道。我们可以通过进入轨道后调用自己的函数方法,使用起来也是比较顺手的。 添加轨道 我们点击加号添加 这样就有一个空轨道了,然后我们创建两个测试脚本。 添加脚本 分别是Playable Behaviour和PlayableAsset脚本。…...

Linux的一些常用指令
一、文件中 r w x - 的含义 r(read)是只读权限, w(write)是写的权限, x(execute)是可执行权限, -是没有任何权限。 二、一些指令 # 解压压缩包 tar [-zxvf] 压缩包名…...

09-设计模式 企业场景 面试题
目录 1.简单工厂模式 编辑 2.工厂方法模式 3.抽象工厂模式 4.策略模式 5.登录案例(工厂模式+策略模式) 6.责任链设计模式 7.单点登录怎么是实现的? 8.权限认证是如何实现的 9.上传数据的安全性你们怎么控制? 10.你负责项目的时候遇到了哪些比较棘手的问题?怎…...

计算机组成原理-练手题集合【期末复习|考研复习】
前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下计算机组成原理中的各章练手题,以供大家期末复习和考研复习的时候使用。 参考资料是王道的计算机组成原理和西电的计算机组成原理。 计算机组成原理系列文章传送门: 第一/二章 概述和数…...

探索 Spring 框架:企业级应用开发的强大工具
CSDN-个人主页:17_Kevin-CSDN博客 收录专栏:《Java》 目录 一、引言 二、Spring 框架的历史 三、Spring 框架的核心模块 四、Spring 框架的优势 五、Spring 框架的应用场景 六、结论 一、引言 在当今数字化时代,企业级应用开发的需求日…...

java数据结构与算法刷题-----LeetCode47. 全排列 II
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 暴力回溯2. 分区法回溯 此题为46题的衍生题,在46题…...

✅技术社区—MySQL和ES的数据同步策略
使用Canal框架实现MySQL与Elasticsearch(ES)的数据同步确实可以提高实时搜索的准确性和效率。Canal通过模拟MySQL的binlog日志订阅和解析,实现了数据的实时同步。在这样的同步机制下,ES中的数据可以非常接近于MySQL数据库中的实时…...

LinearLayout和RelativeLayout对比
LinearLayout和RelativeLayout是Android中应用最为广泛的两种布局, 绝大部分UI均可以通过两种布局中的任何一种进行实现,其对比如下: LinearLayout: 1. LinearLayout可以实现子View按照权重分配显示区域,RelativeLayou…...

蓝桥杯深度优先搜索|剪枝|N皇后问题|路径之谜(C++)
搜索:暴力法算法思想的具体实现 搜索:通用的方法,一个问题如果比较难,那么先尝试一下搜索,或许能启发出更好的算法 技巧:竞赛时遇到不会的难题,用搜索提交一下,说不定部分判题数据很…...

大门对楼梯,怎么办?
中国是一个非常重视风水的国家,风水学发扬和流传已有几千年的历史,很多懂风水的人都知道,大门风水是其中非常重要的一环,因为大门风水直接影响全家人的各种运势。大门风水好,能帮助你一臂之力;若大门风…...

解决驱动开发中<stdlib.h> no such file 的问题
前言 在进行驱动开发时,需要使用malloc等函数,导入C库<stdlib.h>出现bug。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论…...

Find My工牌|苹果Find My技术与工牌结合,智能防丢,全球定位
工作牌一般是由公司发行的,带有相关工作号及佩戴人信息的卡牌,一般由塑料制作而成。具有醒目.增强内部员工归属感等作用。主要构成为公司名字背景图片员工名字照片。胸牌是一种悬挂或串扣于上衣左方的一种工号牌或介绍小标牌,大多数佩戴在西装…...

Springboot解决跨域问题
跨域问题 在Spring Boot中解决跨域问题的原因是因为浏览器的同源策略(Same-Origin Policy)限制了从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。如果前端页面和后端服务不在同一个源(域名、协议、端口号都不相同)&…...

UE5 C++ TPS开发 学习记录(10
p22 这节课把创建,查找,加入游戏房间的菜单类,以及插件内的系统类给补完了.说实话这节课有点绕,因为需要一直使用委托进行传值,先由菜单类Menu向系统类Subsystem发送函数传值请求,然后监听Subsystem的委托回调,同时系统类Subsystem向Session的工具发送请求,监听回调,再返回给M…...

ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数
一、let和const声明变量 1.let没有变量提升,把let放下面打印不出来,放上面可以 <script>console.log(a);let a1;</script> 2.let是一个块级作用域,花括号里面声明的变量外面找不到 <script>console.log(b);if(true){let b1;}//und…...

Docker使用及部署流程
文章目录 1. 准备Docker环境2. 准备应用的Docker镜像3. 在服务器上运行Docker容器方法一:Docker Hub方法二:从构建环境传输镜像4. 管理和维护使用Docker Compose(可选)主要区别步骤 1: 安装Docker ComposeLinuxWindowMac步骤 2: 创建docker-compose.yml文件步骤 3: 使用Doc…...

Nginx的日志怎么看,在哪看,access.log日志内容详解
Nginx 的日志文件通常位于服务器的文件系统中,具体位置可能因配置而异。以下是查看 Nginx 日志的几种方法: 1、查看访问日志:在默认配置下,Nginx 的访问日志文件路径为 /var/log/nginx/access.log。您可以通过命令 sudo cat /var…...

Windows Server 各版本搭建终端服务器实现远程访问(03~19)
一、Windows Server 2003 左下角开始➡管理工具➡管理您的服务器,点击添加或删除角色 点击下一步 勾选自定义,点击下一步 点击终端服务器,点击下一步 点击确定 重新登录后点击确定 点击开始➡管理工具➡计算机管理,展开本地用户…...

Node.js入门基础—day01
个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:给自己一个梦想,给世界一个惊喜。 🎅**学习目标: 坚持每一次的学习打卡 文章目录 初识node.js什…...

基于FPGA的PSRAM接口设计与实现
该系列为神经网络硬件加速器应用中涉及的模块接口部分,随手记录,以免时间久了遗忘。 一 PSRAM与HyperRAM 1、概述 2、异同 接口协议不同,因此在IP设计时需要注意。 Hyperram(Winbond):HyperBus协议 PSRAM(AP公司):X…...