【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)
文章目录
- 4.15 TCP通信实现(服务器端)
- 4.16 TCP通信实现(客户端)
4.15 TCP通信实现(服务器端)
// TCP 通信的服务器端// TCP 通信的服务器端
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(){//1、创建socket(用于监听)int lfd = socket(AF_INET,SOCK_STREAM,0);if(lfd == -1){perror("socket");exit(0);}//2、绑定struct sockaddr_in saddr;saddr.sin_family = AF_INET; //协议族//把点分十进制IP地址转换成int 而且是网络字节序的//saddr->sin_addr.s_addr 本质是一个长整型的变量 结构体套结构体//第三个参数是传出参数,也就是转换好的void* 直接就给了saddr->sin_addr.s_addrinet_pton(AF_INET,"192.168.65.129",&saddr.sin_addr.s_addr); //p:point 点分十进制/*saddr->sin_addr.s_addr = 0; saddr->sin_addr.s_addr = INADDR_ANY; INADDR_ANY这个宏就是00.0.0.0 表示任意地址 比如一台主机有两个网卡,两个都绑定客户端无论用哪一个IP地址 都可以访问到这台主机*///saddr->sin_port = 9999; 这是主机字节序的9999 要转成网络字节序saddr.sin_port = htons(9999);int ret = bind(lfd,(struct sockaddr*)&saddr,sizeof(saddr));if(ret == -1){perror("bind");exit(0);}//3、监听ret = listen(lfd,8);if(ret == -1){perror("listen");exit(0);}//4、接收客户端连接struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);int cfd = accept(lfd,(struct sockaddr*)&clientaddr,&len);if(cfd == -1){perror("accept");exit(0);}//打印客户端信息//把获取到的网络字节序IP和端口转换成主机字节序char clientIp[16];inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,clientIp,sizeof(clientIp));unsigned short clientPort = ntohs(clientaddr.sin_port);printf("client IP is: %s, port is %d: \n",clientIp,clientPort);//5、通信//获取客户端数据char recvBuf[1024] = {0};len = read(cfd,recvBuf,sizeof(recvBuf));if(len == -1){perror("accept");exit(0);}else if(len > 0){printf("recv client data = %s\n",recvBuf);}else if(len == 0){//表示客户端关闭连接printf("client close...");}//给客户端发送数据char* data = "hello,i am server";write(cfd,data,strlen(data));//6、关闭文件描述符close(cfd);close(lfd);return 0;
}
4.16 TCP通信实现(客户端)
// TCP 通信的服务器端
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(){//1、创建socket(用于监听)int lfd = socket(AF_INET,SOCK_STREAM,0);if(lfd == -1){perror("socket");exit(0);}//2、绑定struct sockaddr_in saddr;saddr.sin_family = AF_INET; //协议族//把点分十进制IP地址转换成int 而且是网络字节序的//saddr->sin_addr.s_addr 本质是一个长整型的变量 结构体套结构体//第三个参数是传出参数,也就是转换好的void* 直接就给了saddr->sin_addr.s_addrinet_pton(AF_INET,"192.168.65.129",&saddr.sin_addr.s_addr); //p:point 点分十进制/*saddr->sin_addr.s_addr = 0; saddr->sin_addr.s_addr = INADDR_ANY; INADDR_ANY这个宏就是00.0.0.0 表示任意地址 比如一台主机有两个网卡,两个都绑定客户端无论用哪一个IP地址 都可以访问到这台主机*///saddr->sin_port = 9999; 这是主机字节序的9999 要转成网络字节序saddr.sin_port = htons(9999);int ret = bind(lfd,(struct sockaddr*)&saddr,sizeof(saddr));if(ret == -1){perror("bind");exit(0);}//3、监听ret = listen(lfd,8);if(ret == -1){perror("listen");exit(0);}//4、接收客户端连接struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);int cfd = accept(lfd,(struct sockaddr*)&clientaddr,&len);if(cfd == -1){perror("accept");exit(0);}//打印客户端信息//把获取到的网络字节序IP和端口转换成主机字节序char clientIp[16];inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,clientIp,sizeof(clientIp));unsigned short clientPort = ntohs(clientaddr.sin_port);printf("client IP is: %s, port is %d: \n",clientIp,clientPort);//5、通信//获取客户端数据char recvBuf[1024] = {0};len = read(cfd,recvBuf,sizeof(recvBuf));if(len == -1){perror("accept");exit(0);}else if(len > 0){printf("recv client data = %s\n",recvBuf);}else if(len == 0){//表示客户端关闭连接printf("client close...");}//给客户端发送数据char* data = "hello,i am server";write(cfd,data,strlen(data));//6、关闭文件描述符close(cfd);close(lfd);return 0;
}相关文章:
【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)
文章目录 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端) 4.15 TCP通信实现(服务器端) // TCP 通信的服务器端// TCP 通信的服务器端 #include <stdio.h> #include <arpa/inet.h> #incl…...
windows可视化界面管理服务器上的env文件
需求:在 Windows 环境中通过可视化界面编辑位于 Linux 主机上的 env 文件的情况,我现在环境是windows环境,我的env文件在linux的192.168.20.124上,用户是op,密码是op,文件绝对路径是/home/op/compose/env …...
自然语言处理在智能客服和聊天机器人中的应用
文章目录 1. 引言2. NLP基础2.1 词法分析2.2 语法分析2.3 语义理解2.4 情感分析 3. 智能客服中的应用3.1 自动问答3.2 意图识别3.3 情感分析与情绪识别 4. 聊天机器人中的应用4.1 对话生成4.2 上下文理解 5. 技术原理与挑战5.1 语言模型5.2 数据质量和多样性5.3 上下文理解 6. …...
为什么不建议使用@Async注解创建线程
1 前言 在很久很久之前,我有一段痛苦的记忆。那种被故障所驱使的感觉,在我脑海里久久无法驱散。 原因无它,有小伙伴开启了线程池的暴力使用模式。没错,就是下面这篇文章。 夺命故障 ! 炸出了投资人! 我有必要简单的…...
更新Ubuntu18.04上的CUDA和GCC
问题: 有一台服务器的GPU是1080,有八张卡,已经好久没有人用了。cuda版本是10.1,我现在拿来复现一些论文的模型,经常遇到版本依赖问题,报错Driver is too old。所以要更新一下驱动。遇到的主要问题是gcc版本也太低了&am…...
算法通过村第6关【青铜】| 如何通过中序和后序遍历恢复二叉树
中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 通过这两个遍历顺序恢复二叉树 首先我们知道中序遍历顺序左中右,后序遍历顺序左右中 第一步: 由后序遍历确定根结点为1 > 由中序遍历…...
高斯牛顿法和LM算法异同示例
LM(Levenberg-Marquardt)算法和高斯牛顿(Gauss-Newton)算法是两种用于非线性最小二乘问题的优化算法,它们也有一些相似之处: 迭代优化:LM算法和高斯牛顿算法都使用迭代的方式来优化参数值&#…...
奥威BI财务数据分析方案:只做老板想看的
奥威BI财务数据分析方案是一套从老板的视角出发,做老板想看的财务数据分析报表,帮助老板更好地了解公司的财务状况和经营绩效的综合性智能财务数据分析方案,可实现财务数据分析可视化、灵活自主性,随时为老板提供最为直观的财务数…...
opencv进阶19-基于opencv 决策树cv::ml::DTrees 实现demo示例
opencv 中创建决策树 cv::ml::DTrees类表示单个决策树或决策树集合,它是RTrees和 Boost的基类。 CART是二叉树,可用于分类或回归。对于分类,每个叶子节点都 标有类标签,多个叶子节点可能具有相同的标签。对于回归,每…...
Unity通过TCP/IP协议进行通信
uinty项目中需要与C编写的硬件进行通信,因此采用TCP/IP协议进行通信,主要实现了与服务器的连接、通信内容的发送以及断开连接等功能。 根据确定好的协议格式,编写需要发送的内容,将其转为字节流(byte[])通过…...
基于VuePress搭建知识库
我这边需要搭建一个运维知识库,将项目的方方面面记录下来,方便新手接手运维。 准备环境 Nginx 1.19.0VuePress 1.xMinio RELEASE.2022-02-16T00-35-27Zvuepress-theme-vdoing主题 安装VuePress 根据官网步骤即可 # 创建目录 mkdir vuepress-starter…...
odoo安装启动遇到的问题
问题:在第一次加载odoo配置文件的时候,启动失败 方法: 1、先检查odoo.conf的内容,尤其是路径 [options] ; This is the password that allows database operations: ; admin_passwd admin db_host 127.0.0.1 db_port 5432 d…...
【Flink】Flink提交流程
我们通常在学习的时候需要掌握大数据组件的原理以便更好的掌握这个大数据组件,Flink实际生产开发过程中最常见的就是提交到yarn上进行调度,模式使用的Per-Job模式,下面我们就给大家讲下Flink提交Per-Job任务到yarn上的流程,流程图…...
哪种英特尔实感设备适合您?
原文链接 https://www.intelrealsense.com/which-device-is-right-for-you/ 无论您是深度和跟踪硬件的新手,还是经验丰富的专业人士,确定我们提供的众多英特尔实感产品中哪些产品适合您的项目仍然是一项挑战。在这篇文章中,我们将讨论英特尔…...
C++11的四种强制类型转换
目录 语法格式 static_cast(静态转换) dynamic_cast(动态转换) const_cast(常量转换) reinterpret_cast(重解释) 语法格式 cast-name <typename> (expression) 其中cast-name为static_cast、dynamic_cast、const_cast 和 reinterpret_cast之一…...
分布式事务(4):两阶段提交协议与三阶段提交区别
1 两阶段提交协议 两阶段提交方案应用非常广泛,几乎所有商业OLTP数据库都支持XA协议。但是两阶段提交方案锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题。 缺点: 如果协调者宕机,参与者没有协调者指…...
React源码解析18(9)------ 实现多节点渲染【修改beginWork和completeWork】
摘要 目前,我们已经实现了单节点的,beginWork,completeWork,diff流程。但是对于多节点的情况,比如: <div><span></span><span></span> </div>这种情况,我们还没有处…...
【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Redis 缓存满了怎么办?
引言 Redis 缓存使用内存来保存数据,随着需要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。此时,应该怎么办?本篇文章接下来就来聊聊缓存满了之后的数据淘汰机制。 值得注意的是,在 Redis 中 过期策略 和…...
Grafana 安装配置教程
Grafana 安装配置教程 一、介绍二、Grafana 安装及配置2.1 下载2.2 安装2.2.1 windows安装 - 图形界面2.2.2 linux安装 - 安装脚本 三、Grafana的基本配置3.1 登录3.2 Grafana设置中文 四、grafana基本使用 一、介绍 Grafana是一个通用的可视化工具。对于Grafana而言࿰…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
