C/C++网络编程5——实现基于TCP的服务器端/客户端2
三次握手过程详解:
1:客户端的协议栈向服务器端发送SYN包,并告诉服务器端当前放送序号为j,客户端进入SYNC_SEND状态。
2:服务器端的协议栈收到这个包以后,和客户端进行ACK应答,应答值为j+1,表示对SYN包j的确认,同时服务器也发送一个SYN包,并告诉客户端我的序列号是k,服务器端进入SYNC_RECD状态。
3:客户端协议栈收到ACK以后,使得应用程序从connect调用返回,表示客户端到服务器端的单向连接已经建立成功,客户端进入ESTABLISHED,同时客户端协议栈也会对服务器端的SYN包进行应答,应答数据K+1。
4:应答包到达服务器端后,服务器端协议使得accept阻塞调用返回,这个时候服务器端到客户端的单向连接也建立成功,服务器端进入ESTABLISHED状态。

四次挥手详解:
step1:主机1没有数据要往主机2发送以后,首先发起FIN报文,然后进入FIN_WAIT1状态。
step2:主机2收到FIN报文以后,回复一个确认报文,主机2进入CLOSE_WAIT状态。
step3:主机1收到确认报文以后进入FIN_WAIT2状态,随后主机2需要发送给主机1的数据也发送完了以后继续往主机1发送一个FIN报文,发送完以后主机2进入LAST_ACK状态。
step4:主机1收到这个FIN报文以后,进入TIME_WAIT状态,给主机2回复一个确认报文,主机2收到确认报文以后,主机2的连接状态关闭,主机1停在TIME_WAIT状态2MSL没有再收到FIN报文也进入关闭状态。

C/C++网络编程5——实现基于TCP的服务器端/客户端2的更多相关文章
- C/C++网络编程4——实现基于TCP的服务器端/客户端1
一.TCP服务器调用顺序: 调用socket函数创建套接字:声明并初始化地址信息结构体变量:调用bind函数向套接字分配地址:调用listen函数进入等待连接请求状态,只有调用了listen函数后客户 ...
- C/C++网络编程6——实现基于UDP的服务器端/客户端
通过前面几节的内容,我们已经可以实现基本的C/S结构的程序了,但是当多个客户端同时向服务器端请求服务时,服务器端只能按顺序一个一个的服务,这种情况下,客户端的用户是无法忍受的.所以虚实现并发的服务器端 ...
- 【TCP/IP网络编程】:04基于TCP的服务器端/客户端
摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本 ...
- Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计
http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...
- 网络编程应用:基于TCP协议【实现对象传输】--练习
要求: 基于TCP协议实现,客服端向服务器发送一个对象 服务器接受并显示用户信息 ,同时返回给客户端 "数据已收到" 建一个Student类,属性:name age Student ...
- 网络编程应用:基于TCP协议【实现文件上传】--练习
要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...
- 网络编程应用:基于TCP协议【实现一个聊天程序】
要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...
- Linux 系统编程 学习:008-基于socket的网络编程3:基于 TCP 的通信
背景 上一讲我们介绍了 基于UDP 的通信 这一讲我们来看 TCP 通信. 知识 TCP(Transmission Control Protoco 传输控制协议). TCP是一种面向广域网的通信协议, ...
- 网络编程[第一篇]基于tcp协议的套接字编程
将服务端-客户端的连接比作双方打电话的过程 2019-07-24 一.客户端 主动的一方: 客户端实例化一个socket对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进 ...
随机推荐
- go基础_切片
切片创建方式 1.通过数组创建 2.通过内置函数make创建 切片允许的操作 1.追加元素 2.通过内置函数make创建 package main import "fmt" fun ...
- 【ES6新增语法详述】
目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 "@ ES6新增了关于变 ...
- Azure IoT Hub 十分钟入门系列 (4)- 实现从设备上传日志文件/图片到 Azure Storage
本文主要分享一个案例: 10分钟内通过Device SDK上传文件到IoTHub B站视频:https://www.bilibili.com/video/av90224073/ 本文主要有如下内容: ...
- Spring Boot 开发环境IDEA下的热部署
这个知识点忘记写了,我不是很热衷于IDEA的热部署,觉得太消耗机器性能. 1 引入 Pom <!--热部署--> <dependency> <groupId>org ...
- django之orm的高级操作以及xcc安全攻击
查询用法大全: 1. 比较运算符 # id > 3 res = models.UserInfo.objects.filter(id__gt=3) # id >= 3 res = model ...
- Chrome无法从该网站添加应用,扩展程序和用户脚本
#开始 更新谷歌浏览器之后发现不能通过本地 crx文件安装离线插件了 网上找到的方法有两种 一个就是通过添加浏览器参数解决 但是这个方法我尝试之后失败了 第二个方法就是用工具安装 具体如何太麻烦了就没 ...
- SpringBoot+mongoDB实现id自增
这段时间给朋友做了一个微信小程序,顺便练习一下spring boot,虽然项目使用的是JPA+MySQL,但是好奇尝试了一下MongoDB实现自增ID,虽然MongoDB很少有自增ID的需求(在分布式 ...
- Spring Log4jConfigListener部署多个项目是出错的问题
tomcat下部署多个项目,都用到了org.springframework.web.util.Log4jConfigListener时,需要注意在web.xml中加入webAppRootkey,要不然 ...
- Java IO流详解(六)——转换流
转换流也是一种处理流,它提供了字节流和字符流之间的转换.在Java IO流中提供了两个转换流:InputStreamReader 和 OutputStreamWriter,这两个类都属于字符流.其中I ...
- HashMap遍历,取出key和value
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,在用keySet(key)取value时候,需要key 第一种: Map map = new HashMap( ...