每日一个计算机小知识: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 协议来进行通信,广泛应用于网页实时聊天、实时数据监控、直播弹幕、在线协作工具等浏览器端需要实时交互的场景。

相关推荐
uzong1 天前
后端线上发布计划模板
后端
uzong1 天前
软件工程师应该关注的几种 UML 图
后端
上进小菜猪1 天前
基于 YOLOv8 的 100 类中药材智能识别实战 [目标检测完整源码]
后端
码事漫谈1 天前
AI 技能工程入门:从独立能力到协作生态
后端
码事漫谈1 天前
构建高并发AI服务网关:C++与gRPC的工程实践
后端
颜酱1 天前
前端必备动态规划的10道经典题目
前端·后端·算法
半夏知半秋1 天前
rust学习-闭包
开发语言·笔记·后端·学习·rust
LucianaiB1 天前
【保姆级教程】10分钟把手机变成AI Agent:自动刷课、回消息,学不会我“退网”!
后端
Mr -老鬼1 天前
功能需求对前后端技术选型的横向建议
开发语言·前端·后端·前端框架
IT=>小脑虎1 天前
Go语言零基础小白学习知识点【基础版详解】
开发语言·后端·学习·golang