Linux TCP协议通信 (流程 三次握手 四次挥手 滑动窗口)

TCP通信流程

Socket函数

TCP通信实现(服务器端)

#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main() {//1.创建socketint lfd = socket(AF_INET, SOCK_STREAM, 0);if(lfd == -1) {perror("socket");exit(0);}//2.绑定struct sockaddr_in saddr;saddr.sin_family = PF_INET;inet_pton(AF_INET, "192.168.245.129", &saddr.sin_addr.s_addr);saddr.sin_port = htons(9999);int ret = bind(lfd, (struct sockaddr*)&saddr, sizeof(saddr));if(ret == -1) {perror("bind");return 0;}//3.监听ret = listen(lfd, 8);if(ret == -1) {perror("listen");return 0;}//4.接受struct sockaddr_in clientaddr;int len = sizeof(clientaddr);int cfd = accept(lfd, (struct sockaddr*)&clientaddr, &len);if(cfd == -1) {perror("accept");return -1;}//输出客户端的信息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, client port is %d\n", clientIP, clientPort);//5.获取客户端数据 while(1) {char receiveBuf[1024] = {0};int llen = read(cfd, receiveBuf, sizeof(receiveBuf));if(llen == -1) {perror("read");exit(0);} else if(llen > 0) {printf("receive client data: %s\n", receiveBuf);} else if (llen == 0) {printf("client closed...");break;}//给客户端发送数据char * data = "hello, i`m server";write(cfd, data, strlen(data));}//关闭文件描述符close(cfd);close(lfd);
}

TCP通信实现(客户端)

#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main() {//创建套接字int lfd = socket(AF_INET, SOCK_STREAM, 0);if(lfd == -1) {perror("socket");exit(-1);}//连接服务器struct sockaddr_in serveraddr;inet_pton(AF_INET, "192.168.245.129", &serveraddr.sin_addr.s_addr);serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(9999);int ret = connect(lfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr));if(ret == -1) {perror("connect");_exit(-1);}//通信while(1) {char * data = "hello, i`m client";write(lfd, data, strlen(data));char receiveBuf[1024] = {0};int len = read(lfd, receiveBuf, sizeof(receiveBuf));if(len == -1) {perror("read");exit(0);} else if(len > 0) {printf("receive server data: %s\n", receiveBuf);} else if (len == 0) {printf("server closed...");}}close(lfd);
}

TCP三次握手

TCP滑动窗口

TCP四次挥手

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

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

相关文章

从一张表格开始做挖机报价系统

一、前言 历时4个月的挖机销售报价系统进入收尾阶段&#xff0c;由我直接负责与业务方对接&#xff0c;这中间各种折腾真是一言难尽&#xff0c;项目开发过程中还要维护POS系统以及牛奶配送系统&#xff0c;本项目我们采用的是迭代开发&#xff0c;今天讲一下具体的开发过程以…

CRM和数字营销什么关系?

crm系统是客户管理系统&#xff0c;主要是用来维护和管理客户关系&#xff1b;数字营销是一种营销策略&#xff0c;用来推广产品和服务。 接下来&#xff0c;将为大家带来crm系统和数字营销关系的深度解析&#xff0c;全文干货&#xff01; 一、crm是什么&#xff1f; crm系…

关于性能测试需要重视的要点

性能测试已经是一个老生常谈的话题了&#xff0c;不同的项目或多或少都会涉及到&#xff0c;但是每个人的经验肯定有所不同。今天我想从以下几个方面分享一下我认为关于性能测试需要重视的要点。 性能测试工程师必看视频教程&#xff1a;字节性能测试工程师视频教程&#xff0…

uniapp uni.showToast 一闪而过的问题

问题&#xff1a;在页面跳转uni.navigateBack()等操作的前或后&#xff0c;执行uni.showToast&#xff0c;即使代码中设置2000ms的显示时间&#xff0c;也会一闪而过。 解决&#xff1a;用setTimeout延后navigateBack的执行。

GitLab平台安装中经典安装语句含义解析

yum -y install policycoreutils openssh-server openssh-clients postfix 这是一个Linux命令&#xff0c;用于使用YUM包管理器安装指定的软件包。下面是对这个命令各部分的解释&#xff1a; yum&#xff1a;这是一个Linux命令行工具&#xff0c;用于管理RPM&#xff08;Red …

搭建Windows上的Qt桌面开发环境

搭建Windows上的Qt桌面开发环境 准备有效邮箱安装VS2019 CommunityMicrosoft个人账号注册地址下载在线安装器安装C工具链 安装QtQt开发者账号注册地址下载在线安装器安装Qt 5.15工具链和Qt Creator 使用Qt Creator编译示例工程配置构建套件&#xff08;Kit&#xff09;打开示例…

算法通过村第十二关-字符串|黄金笔记|冲刺难题

文章目录 前言最长公共前缀纵向比较横向比较 字符串压缩问题表示数值的字符串总结 前言 提示&#xff1a;我有时候在想&#xff0c;我是真的不太需要其他人&#xff0c;还是因为跟他们在一起时没法自己&#xff0c;所以才保持距离。我们的交谈就像是平行而毫无交集的自言自语。…

账户和组管理

1. 账户和工作组的分类 1.1. 用户分为三类&#xff1a; 超级账户——账户名为root&#xff0c;它具有一切权限&#xff0c;只有进行系统维护(例如&#xff1a;建立用户等)或其他必要情形下才 用超级用户登录&#xff0c;以避免系统出现安全问题。 系统账户——是Linux系统正常…

element-plus自动引入组件报错,例如collapse、loading

element-plus自动引入组件&#xff0c;例如collapse、loading&#xff0c;使用时报错&#xff0c;报错信息如下图所示&#xff1a; 解决办法&#xff1a;vite-config.ts改变vue的引入顺序&#xff0c;将vue放在第一个

【送书第三期】强势挑战Java,Kotlin杀回TIOBE榜单Top 20!学Kotlin看哪些书?

文章目录 前言01 《深入实践Kotlin元编程》02 《Spring Boot学习指南》03 《Kotlin编程实战》文末送书 前言 与Java一样&#xff0c;Kotlin也是用于Android应用程序开发的编程语言&#xff0c;是Android官方支持的第二种编程语言。 2016年Kotlin正式发布&#xff0c;在Androi…

htb-cozyhosting

HTB-CozyHosting https://app.hackthebox.com/machines/CozyHosting ──(kwkl㉿kwkl)-[~] └─$ tail -l /etc/hosts …

c#访问sql server数据库登录失败

以下配置适用于如下情况&#xff1a;已经能连接数据库的server&#xff0c;而且用户名、密码都对&#xff0c;但通过c#访问数据库时出错&#xff0c;提示login、管道相关的错误。通过一些配置&#xff0c;最终解决了该问题&#xff0c;遇到该问题的小伙伴也可以按照同样配置尝试…

【轻松玩转MacOS】基本操作篇

引言 本文是系列的开篇&#xff0c;我将为大家介绍MacOS的基本操作。对于初次接触MacOS的用户来说&#xff0c;掌握这些基本操作是必不可少的。无论是启动和关机&#xff0c;还是使用键盘和鼠标&#xff0c;或者是快捷键的使用&#xff0c;这些基本操作都是你开始使用MacOS的第…

微信小程序开发缺少中间证书问题(腾讯云、阿里云等做服务器)

项目使用nginx做负载均衡后&#xff0c;不再采用原来直接用jar包的方式直接开启对应端口&#xff0c;所以需要重新从云服务器上下载证书&#xff0c;写入到Nginx读取的证书路径上即可。

XSS CSRF

XSS & CSRF xss&#xff1a;跨站脚本攻击&#xff1a;注入一些非法的脚本 csrf&#xff1a;冒充身份 XSS 反射型 /welcome&#xff1a;res.send(req.query.type) 输入什么就输出什么&#xff08;httpOnly:false&#xff0c;但不是解决方案&#xff09; 比如&#xff1a;?&…

iPhone升级iOS17出现无法连接互联网的错误提示怎么办?

最新的iOS 17系统已经发布了快一个月了&#xff0c;很多人都已升级体验更多全新功能&#xff0c;但有部分用户却在升级过程中遇到一些问题&#xff1a;如无法验证更新&#xff0c;iOS17验证失败&#xff0c;因为您不再连接到互联网、 iPhone无法检查更新等错误问题。明明网络稳…

轻量级接口自动化测试框架

大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…

助力电力行业数字化转型:智慧风电项目介绍

智慧电力作为电力领域的突破性进展&#xff0c;旨在实现能源领域的数字化转型。智慧电力借助数字孪生、IOT、云计算等技术&#xff0c;将传统的电力系统升级为高智能、高效能的系统&#xff0c;助力传统能源企业实现数字化转型。下面让我们来看一看山海鲸可视化提供的智慧电力相…

C# GraphicsPath 类学习

先在窗体放2个picturebox&#xff0c; 然后看一下如下代码&#xff1b; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; us…

物流仓储RFID系统设计案例分享

一、项目背景 为了实现仓储货物管理数字化转型的目标&#xff0c;提升仓储业务自动化和数字化水平&#xff0c;在满足仓储日常需求的基础上&#xff0c;验证物联网和人工智能相关技术能力&#xff0c;为仓储业务的柔性自动化、快速部署和复制提供储备能力。 项目设计目标包括…