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

相关推荐
wefly201731 分钟前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
zhanggongzichu1 小时前
小白怎么理解后端分层概念
后端·全栈
stark张宇2 小时前
Golang后端面试复盘:从Swoole到IM架构,如何支撑360w用户的实时消息推送?
后端
小码哥_常2 小时前
从0到1:搭建Spring Boot 3企业级认证授权平台
后端
小码哥_常3 小时前
告别扫库噩梦!Spring Boot+Redis让订单超时管理飞起来
后端
带娃的IT创业者3 小时前
WeClaw 日志分析实战:如何从海量日志中快速定位根因?
运维·python·websocket·jenkins·fastapi·架构设计·实时通信
大傻^3 小时前
Spring AI Alibaba 快速入门:基于通义千问的AI应用开发环境搭建
java·人工智能·后端·spring·springai·springaialibaba
IT_陈寒4 小时前
SpringBoot实战:3个隐藏技巧让你的应用性能飙升50%
前端·人工智能·后端
彭于晏Yan4 小时前
MQTT消息服务
spring boot·后端·中间件
mftang4 小时前
WebSocket 通信协议详细解析
网络·websocket·网络协议