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.hqwc.cn/news/128386.html

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

相关文章

ToBeWritten之改进威胁猎杀:自动化关键角色与成功沟通经验

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

基础算法之——【动态规划之路径问题】1

今天更新动态规划路径问题1&#xff0c;后续会继续更新其他有关动态规划的问题&#xff01;动态规划的路径问题&#xff0c;顾名思义&#xff0c;就是和路径相关的问题。当然&#xff0c;我们是从最简单的找路径开始&#xff01; 动态规划的使用方法&#xff1a; 1.确定状态并…

LeetCode竞赛---第 366 场周赛

Problem: 100103. 分类求和并作差 &#x1f4da; 题目&#xff1a;给你两个正整数 n 和 m 。 现定义两个整数 num1 和 num2 &#xff0c;如下所示&#xff1a; num1&#xff1a;范围 [1, n] 内所有 无法被 m 整除 的整数之和。num1&#xff1a;范围 [1, n] 内所有 无法被 m 整…

漏洞复现--Juniper Networks Junos OS EX远程命令执行漏洞(CVE-2023-36845)

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

机器学习---RBM、KL散度、DBN

1. RBM 1.1 BM BM是由Hinton和Sejnowski提出的一种随机递归神经网络&#xff0c;可以看做是一种随机生成的 Hopfield网络&#xff0c;是能够通过学习数据的固有内在表示解决困难学习问题的最早的人工神经网络之 一&#xff0c;因样本分布遵循玻尔兹曼分布而命名为BM。BM由二…

如何在VS2022中进行调试bug,调试的快捷键,debug与release之间有什么区别

什么是bug 在学习编程的过程中&#xff0c;应该都听说过bug吧&#xff0c;那么bug这个词究竟是怎么来的呢&#xff1f; 其实Bug的本意是“虫子”或者“昆虫”&#xff0c;在1947年9月9日&#xff0c;格蕾丝赫柏&#xff0c;一位为美国海军工作的电脑专家&#xff0c;也是最早…

JMeter压测如何分配业务比例?

在进行综合场景压测时&#xff0c;由于不同的请求&#xff0c;要求所占比例不同&#xff0c;那如何实现呢&#xff1f; 有人说将这些请求分别放到单独的线程组下&#xff0c;然后将线程组的线程数按照比例进行配置&#xff0c;这种方法不是很好&#xff0c;想想&#xff0c;不…

C++ 学习系列 -- std::list

一 std::list 介绍 list 是 c 中的序列式容器&#xff0c;其实现是双向链表&#xff0c;每个元素都有两个指针&#xff0c;分别指向前一个节点与后一个节点 链表与数组都是计算机常用的内存数据结构&#xff0c;与数组连续内存空间不一样的地方在于&#xff0c;链表的空间是不…

《计算机视觉中的多视图几何》笔记(13)

13 Scene planes and homographies 本章主要讲述两个摄像机和一个世界平面之间的射影几何关系。 我们假设空间有一平面 π \pi π&#xff0c;平面上的一点为 x π x_{\pi} xπ​。 x π x_{\pi} xπ​分别在两幅图像 P , P ′ P, P P,P′上形成了 x , x ′ x, x x,x′。 那…

【1++的Linux】之文件(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;初识文件二&#xff0c;文件接口 一&#xff0c;初识文件 文件就是文件内容属性。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。 我们访问…

办公技巧:Excel日常高频使用技巧

目录 1. 快速求和&#xff1f;用 “Alt ” 2. 快速选定不连续的单元格 3. 改变数字格式 4. 一键展现所有公式 “CTRL ” 5. 双击实现快速应用函数 6. 快速增加或删除一列 7. 快速调整列宽 8. 双击格式刷 9. 在不同的工作表之间快速切换 10. 用F4锁定单元格 1. 快速求…

java项目中git的.ignore文件设置

在Git中&#xff0c;ignore是用来指定Git应该忽略的故意不被追踪的文件。它并不影响已经被Git追踪的文件。我们可以通过.ignore文件在Git中指定要忽略的文件。 当我们执行git add命令时&#xff0c;Git会检查.gitignore文件&#xff0c;并自动忽略这些文件和目录。这样可以避免…