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对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进 ...
随机推荐
- android底部导航栏实现
第一种用radiobutton实现 https://wizardforcel.gitbooks.io/w3school-android/content/75.html 布局文件,使用radiogrou ...
- [转] Go 的并发模式:Context
[转] Go 的并发模式:Context tips:昨天看了飞雪无情的关于 Context 的文章,对 go 中 Context 有了一个初步的认识.今天看到一个 go 官方博客的关于 Context ...
- Git - 05. git log & git show
1. 概述 有了提交, 就必须有日志 日志用处很多, 这里我就不多说了 2. 项目日志 概述 查看当前分支的 提交记录 命令 普通查看 命令 > git log 显示 commit id 包括 ...
- 本次我们使用idea构建springmvc项目
该案例的github地址:https://github.com/zhouyanger/demo/tree/master/springmvcdemo1 1.首先我们可以创建maven项目,file-&g ...
- Linux02——解压和压缩
压缩文件①(tar)(zip) tar -zcvf (压缩名字).tar.gz (要压缩的内容,中间可用空格表示) -c 创建一个新归档 -v 显示详细信息 -f 指定压缩后的文件名 -z 通过gzi ...
- 喵星之旅-狂奔的兔子-myeclipse搭建ssm
. 可以使用试用期限内的myeclipse,也可以找到有授权的机器进行操作.搭建好的项目框架可以直接移植到免费软件eclipse使用.或者直接购买myeclipse授权. 一.创建一个java web ...
- 在linux下安装java(centos和ubuntu)
在本地测试环境安装插件,发现还得用到java,虽说是个程序员,可是没用过java啊,哎,但是插件得用啊,怎么办啊?自己装呗 一.自己的系统:CentOS 7 1.查看CentOS自带JDK是否已安装. ...
- Jmeter_正则表达式提取器_提取单组数据
1.用处:提取登录信息/获取session或者token数值 2.举例:获取登录结果的获取:msg":"登录成功" 这个数据 3.HTTP->后置处理器->正 ...
- FFmpeg + php 视屏转换
什么是FFmpeg? FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进 ...
- 【C语言】输入圆的半径,求解圆的周长和面积
公式: C=2πr S=πr² 代码: #include<stdio.h> int main() { float r,PI; PI = 3.14159; printf("请输入圆 ...