Socket 编程

1:针对 TCP 应该如何 Socket 编程?

服务端和客户端初始化 socket,得到文件描述符;

服务端调用 bind,将 socket 绑定在指定的 IP 地址和端口;

服务端调用 listen,进行监听;

服务端调用 accept,等待客户端连接;

客户端调用 connect,向服务端的地址和端口发起连接请求;

服务端 accept 返回用于传输的 socket 的文件描述符;

客户端调用 write 写入数据;服务端调用 read 读取数据;

客户端断开连接时,会调用 close,那么服务端 read 读取数据的时候,就会读取到了 EOF,待处理完数据后,服务端调用 close,表示连接关闭。

listen 时候参数 backlog 的意义?

accept 发生在三次握手的哪一步?

客户端调用 close 了,连接是断开的流程是什么?

没有 accept,能建立 TCP 连接吗?

可以的,accpet 系统调用并不参与 TCP 三次握手过程,它只是负责从 TCP 全连接队列取出一个已经建立连接的 socket,用户层通过 accpet 系统调用拿到了已经建立连接的 socket,就可以对该 socket 进行读写操作了。

没有 listen,能建立 TCP 连接吗?

答案:可以的

客户端是可以自己连自己的形成连接(TCP自连接 ),也可以两个客户端同时向对方发出请求建立连接(TCP同时打开 ),这两个情况都有个共同点,就是没有服务端参与,也就是没有 listen,就能 TCP 建立连接。

这里需要注意的是,服务端调用 accept 时,连接成功了会返回一个已完成连接的 socket,后续用来传输数据。

所以,监听的 socket 和真正用来传送数据的 socket,是「两个」 socket,一个叫作监听 socket,一个叫作已完成连接 socket。

成功连接建立之后,双方开始通过 read 和 write 函数来读写数据,就像往一个文件流里面写东西一样。
客户端 connect 成功返回是在第二次握手,服务端 accept 成功返回是在三次握手成功之后

相关推荐
Ai1731639157912 小时前
GB200 NVL72超节点深度解析:架构、生态与产业格局
大数据·服务器·人工智能·神经网络·机器学习·计算机视觉·架构
思茂信息13 小时前
CST交叉cable的串扰(crosstalk)仿真
服务器·开发语言·人工智能·php·cst
weixin_4491736513 小时前
Linux -- 项目中查找日志的常用Linux命令
linux·运维·服务器
白羊by13 小时前
Softmax 激活函数详解:从数学原理到应用场景
网络·人工智能·深度学习·算法·损失函数
VBsemi-专注于MOSFET研发定制13 小时前
高端牧光互补储能电站功率链路设计实战:效率、可靠性与系统集成的平衡之道
网络·人工智能
琉璃榴13 小时前
Visual Studio Code连接远程服务器
服务器·vscode·github
深念Y14 小时前
赛米尼M02/海纳斯HiNAS系统-WiFi驱动安装教程
运维·服务器·网络·docker·nas·机顶盒·hinas
会飞的土拨鼠呀14 小时前
Ubuntu24.04安装open-vm-tools
运维·服务器
Gofarlic_OMS14 小时前
应对MathWorks合规审查的专项准备工作
大数据·服务器·网络·数据库·人工智能
艾醒(AiXing-w)14 小时前
Linux系统管理(二十)——Linux root磁盘不足?一站式应急清理方案(亲测可用)
linux·运维·服务器