C/S模型-TCP

server/2025/3/27 0:22:20/

下图是基于TCP协议的客户端/服务器程序的一般流程:

TCP协议通讯流程

服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。

数据传输的过程:

建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求,一问一答的方式。因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。

如果客户端没有更多的请求了,就调用close()关闭连接,就像写端关闭的管道一样,服务器的read()返回0,这样服务器就知道客户端关闭了连接,也调用close()关闭连接。注意,任何一方调用close()后,连接的两个传输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,仍可接收对方发来的数据。

在学习socket API时要注意应用程序和TCP协议层是如何交互的: 应用程序调用某个socket函数时TCP协议层完成什么动作,比如调用connect()会发出SYN段 应用程序如何知道TCP协议层的状态变化,比如从某个阻塞的socket函数返回就表明TCP协议收到了某些段,再比如read()返回0就表明收到了FIN段。

文章来源:https://blog.csdn.net/qq_71320435/article/details/146372863
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/177338.html

相关文章

神思智飞无人机智能调度系统介绍

神思智飞无人机智能调度系统介绍 神思智飞是神思电子技术股份有限公司自主研发的无人机智能调度系统,定位为无人机的“智慧大脑”,通过AI、大数据与通信技术的融合,实现无人机集群的自主化、智能化调度与协同作业,广泛应用于智慧交通、森林防火、应急救援、城市治理等低空…

Vue学习汇总(JS长期更新版)

文章目录 一、开始  二、基础 目录 一、开始 1、[Vue]VsCode快捷键 二、基础 1、[Vue]模版语法        2、[Vue]属性绑定        3、[Vue]条件渲染        4、[Vue]列表渲染

github上传文件方法格式

echo "# myHtmlFirst1.0" >> README.md git init git add README.md(这条指令改成下面的) git add . git commit -m "first commit" git branch -M main git remote add origin gitgithub.com:xxxxxxxxx/myHtmlFirst1.0.git git push -u origin ma…

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE:用来创建数据库、表、索引等对象ALTER:用来修改已存在的数据库对象DROP:用来删除整个数据库或者数据库中的表TRUNCATE:用来删除表中所有的行…

Unity 从零开始的框架搭建1-7 FSM有限状态机与其应用示例

本文小白可能看不懂,所以引路:​​​​​​【最用心 の Unity百宝箱】4. 有限状态机_哔哩哔哩_bilibili 当然,我不是按照小棋这么写的,但是思想都是一样的 另外说句题外话,配合动画状态机的函数用代码去控制逻辑才是真理,大量连线会导致项目无法维护,比如unity商店某Poly FPS P…

搭建刷题专业版小程序系统

在这个知识竞争激烈的时代,无论是准备职业资格考试,还是为了学业提升,刷题都是必不可少的学习环节。然而,面对市面上五花八门的刷题小程序,盗版多、功能不完善、二次开发困难等问题层出不穷。今天,就给大家…

Cursor IDE 入门指南

什么是 Cursor? Cursor 是一款集成了 AI 功能的现代代码编辑器,基于 VSCode 开发,专为提高开发效率而设计。它内置强大的 AI 助手功能,能够理解代码、生成代码、解决问题,帮助开发者更快、更智能地完成编程任务。 基础功能 1.…

基于Neo4j的文物推荐系统

发现历史的瑰宝:基于Neo4j的文物推荐系统 在这个信息爆炸的时代,如何快速找到自己喜爱的文化艺术品?我们的基于Neo4j的文物推荐系统,将为你打开文物世界的大门,让你在海量数据中轻松找到心仪的文物。 用户端&#xf…