TCP的pop网络模式

TCP的pop网络模式

1、tcp连接的状态有以下11种

  • CLOSED:关闭状态
  • LISTEN:服务端状态,等待客户端发起连接请求
  • SYN_SENT:客户端已发送同步连接请求,等待服务端相应
  • SYN_RECEIVED:服务器收到客户端的SYN请请求,并发送自己的SYN响应,并等待客户端对这个SYN+ACK的确认(等待客户端连接确认);
  • ESTABLISHED:双方完成三次握手,连接成功,可以进行数据传输;
  • FIN_WAIT_1:主动关闭连接的一方(通常是客户端)已经发送FIN报文,但是还未收到对方的确认。此时仍可以进行数据接收;
  • FIN_WAIT_2:主动关闭一方收到了对方的FIN确认,但是没收到对方的FIN,进入半连接状态,仅能接收数据;
  • CLOSE_WAIT:被动关闭连接的一方已经收到FIN,并发送了确认,但尚关闭连接,等待应用层释放资源;
  • CLOSING:双方都发送了关闭请求,都在等待对方确认;
  • LAST_ACK:被动关闭的一方发送了FIN,等待最后的ACK来关闭连接;
  • TIME_WAIT:主动关闭方发送完FIN,并收到对方的FIN+ACK后进入该状态,等待足够长的时间确保对方能够收到确认后再关闭连接;
  • 所有连接终止程序完成后,套接字回到CLOSED状态

tcp所有的状态转换图如下:

在这里插入图片描述

2、正常的TCP连接和断开状态转换:

客户端状态转换过程

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

服务端状态转换过程
CLOSED->LISTEN->SYN_RCVD->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

图解TCP的三次握手四次挥手 - Herman

3、其他状态转换过程

同时发送断开连接

ESTABLISHED->FIN_WAIT_1->CLOSING->TIME_WAIT->CLOSED

在这里插入图片描述

同时去发送连接(pop网络模式)

CLOSED->SYN_SENT->SYN_RCVD->ESTABLISHED

在这里插入图片描述
Peer-to-Peer,中文译为“对等网络”或“点对点技术”,是一种分布式应用架构,其中每个参与者(称为“节点”)都能够同时作为客户端和服务器,直接与其它节点进行数据交互,而不需要通过中央服务器中转。P2P网络的关键特征是去中心化和资源的分散共享,这使得网络更加健壮,更能适应大规模的数据交换和共享;

pop网络模式的代码实现:

#include <sys/socket.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/poll.h>
#include <arpa/inet.h>int bind_localaddr(const char *ip, short port) {int connfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in tcpclient_addr;memset(&tcpclient_addr, 0, sizeof(struct sockaddr_in));tcpclient_addr.sin_family = AF_INET;tcpclient_addr.sin_addr.s_addr = htonl(INADDR_ANY);tcpclient_addr.sin_port = htons(port);if (-1 == bind(connfd, (struct sockaddr*)&tcpclient_addr, sizeof(struct sockaddr))) {perror("bind");return -1;}return connfd;
}int connect_tcpserver(int connfd, const char *ip, short port) {struct sockaddr_in tcpserver_addr;memset(&tcpserver_addr, 0, sizeof(struct sockaddr_in));tcpserver_addr.sin_family = AF_INET;tcpserver_addr.sin_addr.s_addr = inet_addr(ip);tcpserver_addr.sin_port = htons(port);int ret = connect(connfd, (struct sockaddr*)&tcpserver_addr, sizeof(struct sockaddr_in));if (ret) {return -1;}return connfd;
}void *client_thread(void *arg) {	int clientfd = *(int *)arg;while (1) {		printf(" client > ");char buffer[128] = {0};scanf("%s", buffer);if (strcmp(buffer, "quit") == 0) {break;}int len = strlen(buffer);printf("count: %d, send: %s\n", len, buffer);send(clientfd, buffer, len, 0);}	
}int main(int argc, char *argv[]) {if (argc < 3) {printf("arg\n");return -1;}char *ip = argv[1];int port  = atoi(argv[2]);int sockfd = bind_localaddr("0.0.0.0", 8000);while (1) {int ret = connect_tcpserver(sockfd, ip, port);if (ret < 0) {usleep(1);continue;}break;}printf("connect success\n");pthread_t thid;		pthread_create(&thid, NULL, client_thread, &sockfd);struct pollfd fds[1] = {0};fds[0].fd = sockfd;	fds[0].events = POLLIN;while (1) {int nready = poll(fds, 1, -1);if (fds[0].revents & POLLIN) {char buffer[128] = {0};				int count = recv(sockfd, buffer, 128, 0);if (count == 0) {fds[0].fd = -1;	fds[0].events = 0;close(sockfd);break;}printf("recv --> count: %d, buffer: %s\n", count, buffer);}}
}

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

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

相关文章

MySQL 基本语法讲解及示例(下)

第六节&#xff1a;如何检索资料 在本节中&#xff0c;我们将介绍如何使用SQL语句检索数据库中的资料&#xff0c;具体包括选择特定列、排序、条件过滤以及组合排序等操作。我们以一个名为student的表格为例&#xff0c;演示不同的检索方法。 初始表格 student student_idname…

Python中frozenset,秒变不可变集合,再也不用担心多线程了!

目录 1、Frozenset基础介绍 🌐 1.1 Frozenset定义与创建 1.2 不可变集合特性 1.3 与Set的区别对比 2、Frozenset操作实践 🧩 2.1 初始化与添加元素尝试 2.2 成员测试: in & not in 2.3 集合运算: 并集、交集、差集 2.4 使用场景示例: 字典键、函数参数默认值 …

劲爆!华为享界两款新车曝光,等等党有福了

文 | AUTO芯球 作者 | 雷慢 劲爆啊&#xff0c;北汽的一份环境影响分析报告&#xff0c; 不仅曝光了享界S9的生产进展&#xff0c; 还泄露了自家的另两款产品&#xff0c; 第一款是和享界S9同尺寸的旅行车&#xff0c; 我一看&#xff0c;这不是我最喜欢的“瓦罐”吗&…

v-html 空格/换行不生效

接口返回的内容如下&#xff1a;有空格有换行&#xff0c;但 使用v-html无效 需加css样式 white-space: pre-wrap; <div class"pretty-html" v-html"Value"></div>.pretty-html {white-space: pre-wrap; /* 保留空格和换行&#xff0c;并允许…

掌握麦肯锡精英的6个技巧,你也能成为1%的精英!

不知道大家有没有想过&#xff0c;我们和那些全球顶尖精英的差距可能只有1%&#xff0c;只是99%的人还不知道这件事。 今天给大家推荐一本好书&#xff0c;《你和麦肯锡精英的差别只有1%》。优思学院发现&#xff0c;在我们的六西格玛、精益管理的学生中很多人对自己没有自信。…

软通动力子公司鸿湖万联最新成果SwanLink AI亮相世界人工智能大会

7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC 2024&#xff09;在上海拉开帷幕&#xff0c;软通动力董事长兼首席执行官刘天文受邀出席开幕式。其间&#xff0c;软通动力携子公司鸿湖万联深度参与到大会各项活动中&#xff0c;并全面展…

数字化产科管理平台全套源码,java产科电子病历系统源码

数字化产科管理平台全套成品源码&#xff0c;产科电子病历系统源码&#xff0c;多家大型妇幼专科医院应用案例。源码完全授权交付。 数字化产科管理平台&#xff08;智慧产科系统&#xff09;是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天以内的一…

BERT--学习

一、Transformer Transformer&#xff0c;是由编码块和解码块两部分组成&#xff0c;其中编码块由多个编码器组成&#xff0c;解码块同样也是由多个解码块组成。 编码器&#xff1a;自注意力 全连接 多头自注意力&#xff1a;Q、K、V 公式&#xff1a; 解码块&#xff1…

【anaconda】—“conda info“命令后conda配置和环境信息的理解

文章目录 conda配置和环境信息的理解 conda配置和环境信息的理解 安装anaconda成功后&#xff0c;打开cmd&#xff0c;输入"conda info"命令&#xff0c;结果显示如下&#xff1a; conda的配置和环境信息的输出。以下是对每个字段的解释&#xff1a; active environm…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

中电金信:加快企业 AI 平台升级,构建金融智能业务新引擎

在当今数字化时代的浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;技术的蓬勃发展正为各行业带来前所未有的变革与创新契机。尤其是在金融领域&#xff0c;AI 模型的广泛应用已然成为提升竞争力、优化业务流程以及实现智能化转型的关键驱动力。然而&#xff0c;企业在积…

【C++ 】解决 C++ 语言报错:Null Pointer Dereferenc

文章目录 引言 在 C 编程中&#xff0c;空指针解引用&#xff08;Null Pointer Dereference&#xff09;是一种常见且危险的错误。当程序试图通过空指针访问内存时&#xff0c;会导致程序崩溃或产生不可预期的行为。本文将详细探讨空指针解引用的成因、检测方法及其预防和解决…

简单配置VScode轻量级C++竞赛环境

1. 安装拓展 Chinese是中文&#xff0c;需要重启才可以运行&#xff0c;C/C拓展只是进行语法代码提示&#xff0c;不需要进行任何配置修改&#xff0c;默认即可。 2. 创建文件 如上图创建好各级文件夹&#xff0c;其中C是工作文件夹&#xff0c;.vscode是配置文件夹&#xff0…

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

学习测试2-方法

设计测试用例 设计测试用例的万能公式 (在没有需求文档的情况下&#xff09; 软件质量模型 效率就是性能 兼容性测试 浏览器 谷歌 IE 火狐 苹果 百度 Windows7 10 11 苹果系统 app 不同品牌 小米 vivo 华为 苹果 不同的操作系统 安卓 鸿蒙 苹果 -----------------------…

TikTok马来西亚直播网络怎么配置?

TikTok是一款全球流行的社交媒体应用&#xff0c;在东南亚地区拥有大量用户。在马来西亚这个多元化的国家&#xff0c;配置高效稳定的直播网络对TikTok的运营至关重要。 配置马来西亚直播网络的必要性 广泛的地理覆盖&#xff1a;马来西亚包括大片陆地和众多岛屿&#xff0c;网…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则&#xff1a;/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件&#xff0c;然后把html 的静态资源&#xff0c;绑定好是Nginx优先级高的静态资源路径&#xff0c;就去交给nginx静态资源…

Prometheus + Grafana 监控系统搭建使用指南-Nacos 接入 Prometheus 监控

Nacos 接入 Prometheus 监控 系列文章目录 Prometheus 的安装部署Grafana的安装部署Linux服务器接入Prometheus监控-Node Exporter 安装指南Prometheus 接入SpringBoot微服务监控Mysql 接入 Prometheus RocketMQ 接入Prometheus 监控ElasticSearch 接入 PrometheusNacos 接入…

在Android运行时切换Retrofit Base URL:简化开发环境与生产环境的切换

在运行时切换Retrofit Base URL:简化开发环境与生产环境的切换 在Android开发中,Retrofit是一个由Square开发的类型安全的HTTP客户端库。它为API认证和网络请求提供了一个强大的框架。然而,在开发过程中,我们常常需要在不同的环境(如开发环境和生产环境)之间切换Base UR…

YOLOv8改进 添加CVPR2024 PKINet中注意力机制CAAttention

一、PKINet论文 论文地址:2403.06258 (arxiv.org) 二、CAAttention结构 CAA(Context Anchor Attention)注意力模块是一种用于捕捉长距离上下文信息的并行模块。 在计算机视觉领域中,上下文信息是指与目标物体或任务相关的周围环境和语境信息。上下文信息可以帮助我们更好…