每日一个计算机小知识:Socket

每日分享一个有趣的计算机小知识,今日话题:Socket

socket ˈsɑːkɪt 作英语名词时表示:插座、插孔、凹槽、窝、孔穴。在计算机领域,socket 被翻译为套接字,它是操作系统提供的进程间网络通信接口(并不是具体实现,不同的系统和语言可以实现不同),使得不同主机或同一主机上的应用程序可以在网络中进行数据传输。

Socket 起源于 Unix 系统,于1983年正式发布,它解决了网络编程中各种协议细节复杂、跨平台兼容性差的问题,统一了网络通信的编程接口。

它本质上是一个抽象接口,位于应用层和传输层之间,屏蔽了底层网络协议的复杂细节,将TCP、UDP等底层协议的调用封装成简单的 API(如bind、listen、accept、connect、send、recv、close),让开发者无需直接操作复杂的协议细节就能实现网络通信。

下面以TCP协议传输数据为例演示,括号里以打电话举例

服务器端步骤:

创建Socket => 绑定端口 => 监听连接 => 接受连接 => 收发数据 => 关闭连接

1. 创建 Socket

调用 socket() 函数,创建一个 TCP 类型的 Socket。(先 装个电话)

2. 绑定端口

调用 bind() 函数,将 Socket 与端口绑定,告诉操作系统监听这个端口。(给电话绑个固定号码:IP + 端口)

3. 监听连接

调用 listen() 函数,让 Socket 进入监听状态,等待客户端连接。(开机等着)

4. 接受连接

调用 accept() 函数,阻塞等待客户端连接;当有客户端连接时,返回一个新的 Socket(专门用于与该客户端通信),原 Socket 继续监听其他连接。(有人打来电话就接)

5. 收发数据

通过新 Socket 的 recv() 接收和 send() 发送函数与客户端交互。(接了电话之后就可以聊天)

6. 关闭连接

通信结束后,调用 close() 关闭 Socket。(聊完挂电话)

客户端步骤:

创建Socket => 发起连接 => 收发数据 => 关闭连接

1. 创建 Socket

调用 socket() 函数,创建 TCP Socket。(也先装个电话)

2. 发起连接

调用 connect() 函数,向服务器发起连接,触发三次握手。(有事拨服务器的号码)

3. 收发数据

连接建立后,通过 send() recv() 与服务器进行数据交互。(电话通了就能互相聊天)

4. 关闭连接

调用 close() 关闭 Socket,触发四次挥手。(聊完挂电话)

还有一个跟 Socket 名字很像的叫 WebSocket,它是基于 TCP 的一种应用层、全双工、有状态、长连接、双向的网络通信协议,于2011年被 IETF 定为正式标准。弥补了 HTTP 协议只能由客户端发起通信的缺陷,让服务端也能主动向客户端推送数据。

它通过一次HTTP握手建立持久连接,后续通信复用同一TCP通道,连接后再用真正的 WebSocket 协议来进行通信,广泛应用于网页实时聊天、实时数据监控、直播弹幕、在线协作工具等浏览器端需要实时交互的场景。

相关推荐
维克兜率天4 小时前
【维克】ARMA模型:AR与MA的完美结合
后端·restful
是未才5 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
上海安当技术5 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队6 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_431600447 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
IT_陈寒7 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635078 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo9 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林9 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端
feng尘9 小时前
# 彻底搞懂 ReentrantLock 与 tryLock:从秒杀实战到 AQS 独占模式源码剖析
后端