网络编程1

网络编程中,客户端调用close或者shutdown后,操作系统会给服务器发送一个FIN

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>int main() {int sockfd;struct sockaddr_in server_addr;// 创建套接字sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd == -1) {perror("socket");exit(EXIT_FAILURE);}// 设置服务器地址和端口memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(12345);if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {perror("inet_pton");close(sockfd);exit(EXIT_FAILURE);}// 连接到服务器if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {perror("connect");close(sockfd);exit(EXIT_FAILURE);}// 发送数据const char *message = "Hello, Server!";send(sockfd, message, strlen(message), 0);// 关闭套接字,触发FIN包的发送close(sockfd);// 由于调用了close,套接字sockfd已无效,不再执行任何操作return 0;
}

TCP连接关闭过程
在TCP协议中,连接的关闭通常经历以下几个阶段:

客户端调用 close:
客户端调用 close 函数关闭套接字。
操作系统会发送一个 FIN 包给服务器,表示客户端不会再发送数据。

服务器接收 FIN:
服务器接收到 FIN 包后,会向客户端发送一个 ACK(Acknowledgment)包,确认已经接收到 FIN。
服务器进入半关闭状态,可以继续向客户端发送数据,但不能再接收数据。

服务器调用 close:
当服务器完成数据发送并准备关闭连接时,会调用 close 函数。
服务器发送一个 FIN 包给客户端,表示服务器也不会再发送数据。

客户端接收 FIN:
客户端接收到服务器的 FIN 包后,向服务器发送一个 ACK 包,确认已经接收到 FIN。
客户端完全关闭连接,释放相关资源。

连接完全关闭:
当双方都发送并接收到 FIN 和 ACK 包后,连接才完全关闭。

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

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

相关文章

Vue79-路由组件独有的2个新的生命周期钩子

一、需求 news.vue路由组件被缓存了&#xff08;因为想要保留里面的输入框的数据&#xff01;&#xff09;&#xff0c;导致&#xff0c;路由页面切走&#xff0c;组件也不会被销毁&#xff0c;所以&#xff0c;beforeDestroy()函数就不会被执行&#xff0c;所以&#xff0c;定…

npm、yarn、pnpm 最新国内镜像源设置和常见问题解决

1. npm 设置国内镜像源 1.1 镜像源概述 镜像源是软件包管理工具用来下载和安装软件包的服务器地址。由于网络原因&#xff0c;直接使用官方源可能会导致速度慢或连接失败的问题。国内镜像源可以提供更快的访问速度和更稳定的连接。 1.2 镜像源的选择 国内有许多可用的npm镜…

Java中如何使用设计模式来解决编程问题?

Java中使用设计模式来解决编程问题&#xff0c;可以显著提高代码的可复用性、可维护性和可读性。设计模式是一套被广泛应用于软件工程的解决方案&#xff0c;描述了在特定上下文中面对具体问题时的可复用解决方案。以下是几种常用的设计模式及其应用场景&#xff1a; 单例模式…

数据结构课设——文章编辑系统

需求分析(菜单 输入文章 统计字符 童子字符串出现次数 删除某子串 查看文章 保存文章 加载文章)、概要设计(算法功能设计 软件环境)、详细设计(主要数据类型 变量 函数 算法流程图)、调试分析(非法合法测试数据、遇到问题解决方案解决结果)、总结、文献、附录(代码) …

React+TS前台项目实战(十二)-- 全局常用组件Toast封装,以及rxjs和useReducer的使用

文章目录 前言Toast组件1. 功能分析2. 代码详细注释&#xff08;1&#xff09;建立一个reducer.ts文件&#xff0c;用于管理状态数据&#xff08;2&#xff09;自定义一个清除定时器的hook&#xff08;3&#xff09;使用rxjs封装全局变量管理hook&#xff08;4&#xff09;在to…

文字模拟:经营酒店隐私政策

隐私政策 文字模拟&#xff1a;经营酒店隐私政策 一、引言 本隐私政策适用于我们提供的文字模拟&#xff1a;经营酒店小游戏&#xff08;以下简称“游戏”&#xff09;。我们非常重视用户的隐私和个人信息的保护&#xff0c;因此制定了本隐私政策&#xff0c;以解释我们如何…

在scrapy中使用Selector提取数据

经院吉吉&#xff1a; 首先说明一下&#xff0c;在scrapy中使用选择器是基于Selector这个对象滴&#xff0c;selector对象在scrapy中通过XPATH或是CSS来提取数据的&#xff0c;我们可以自己创建selector对象&#xff0c;但在实际开发中我们不需要这样做&#xff0c;因为respons…

御道源码(ruoyi-vue-pro)个人使用小结

御道源码&#xff08;ruoyi-vue-pro&#xff09;个人使用小结 一、Git地址 1、平台项目简介及地址 2、开发指南&#xff0c;如图所示&#xff0c;部分功能需要收费&#xff0c;可自行了解 二、项目文件夹结构示例&#xff1a; 三、技术介绍 1.基于 Spring Boot MyBatis P…

Java字符串连接符拼接操作

在Java的算术运算符中的加法符号“ ”&#xff0c;可以用来进行算术运算&#xff0c;也可以用来当作连接符进行字符串的拼接。 当“ ”操作中出现字符串时&#xff0c;这个“ ”是字符串连接符&#xff0c;而不是运算符了。 会将前后的数据进行拼接在一起&#xff0c;并产生…

dll丢失应该怎么解决,总结5种解决DLL丢失问题的方法

在数字时代&#xff0c;我们与计算机的每一天都密不可分。然而&#xff0c;就像所有技术产品一样&#xff0c;我们的计算设备也时不时地会出现一些问题&#xff0c;让人头疼不已。就在上周&#xff0c;我遭遇了一个令人崩溃的技术挑战——DLL文件丢失。这个看似微不足道的小问题…

转--基于OpenEuler的Docker容器安装使用

/usr/sbin/sshd执行以下命令查看ssh服务是否已经开始监听22端口&#xff1a; netstat -tuln | grep :22看到以下输出证明ssh服务已启动&#xff1a; [rootmaster /]# netstat -tuln | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN …

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时&#xff0c;不加控制&#xff0c;会带来一些问题。 比如下面这种场景&#xff1a; 有一个tickets表&#xff0c;这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候&#xff0c;将票出售了&#x…

OpenCloudOS系统上安装Java环境

在腾讯云OpenCloudOS系统上安装Java环境&#xff0c;可以使用yum包管理器进行安装。以下是安装Java环境的步骤和示例代码&#xff1a; 首先打开终端。 执行以下命令以更新yum包索引&#xff1a; sudo yum update 安装OpenJDK Java环境&#xff0c;可以选择安装Java 8或者更…

【Linux基础IO】深入理解缓冲区

缓冲区在文件操作的过程中是比较重要的&#xff0c;理解缓冲区向文件刷新内容的原理可以更好的帮助我们更深层的理解操作系统内核对文件的操作。 FILE 因为IO相关函数与系统调用接口对应&#xff0c;并且库函数封装系统调用&#xff0c;所以本质上&#xff0c;访问文件都是通过…

ES数值类型慢查询优化

现象 某个查询ES接口慢调用告警&#xff0c;如图&#xff0c;接口P999的耗时都在2500ms: 基本耗时都在查询ES阶段&#xff1a; 场景与ES设定 慢调用接口为输入多个条件分页查询&#xff0c;慢调用接口调用的ES索引为 express_order_info&#xff0c;该索引通过DTS(数据同步…

STM32人工智能检测-筛选机器人

前言 本文描述了一种使用STM32进行机器人筛选的办法。筛选对象是我的粉s&#xff0c;删选办法是瞪眼法。 问题现象 每次当我的STM32 向外界发出一篇新的的报文&#xff0c;总能在1H之内得到focus&#xff0c;格式如下 [title][body][tail]于是我对各个focus 我报文的对象进…

Redis数据过期、淘汰策略

数据过期策略&#xff1a; 惰性删除&#xff1a; 设置该key过期时间后&#xff0c;我们不去管它&#xff0c;当需要该key时&#xff0c;我们在检查其是否过期&#xff0c;如果过期&#xff0c;我们就删掉它&#xff0c;反之返回该key。 这种方式对cpu友好&#xff08;只在用…

浏览器/H5复制链接功能

方法1&#xff1a;execCommand copyLink(){//复制链接--execCommandlet input document.createElement(input); //创建一个input标签input.value this.shareForm.url; //复制的内容&#xff0c;没有先获取标签document.body.appendChild(input);//将input添加的document中in…

C# OCCT Winform 界面搭建

目录 1.创建一个WInform项目 2.代码总览 代码解析 3.添加模型到场景 4.鼠标交互 1.创建一个WInform项目 2.代码总览 using Macad.Occt.Helper; using Macad.Occt; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Co…

PHP学习总结-入门篇

PHP简介 PHP (Hypertext Preprocessor)&#xff0c;即“超文本预处理器”。PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP语法吸收了C语言、Java和Perl的特点&#xff0c;便于学习。PHP 是开源免费的&#xff0c;主要适用于Web开发领域&#xff0c;使用广泛。…