每日一个计算机小知识: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 小时前
一个接口多个实现,Spring 怎么"适配多场景"?
后端
花开彼岸天~4 小时前
鸿蒙原生开发手记:徒步迹 - 自定义组件开发规范
后端·华为·harmonyos·鸿蒙系统
songroom6 小时前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust
kebeiovo6 小时前
游戏服务端开发:Actor模型详解(Go语言)
开发语言·后端·golang
红烧大青虫6 小时前
setInterval 倒计时实现:60s 验证码发送逻辑
后端·华为·harmonyos·鸿蒙系统
小村儿7 小时前
连载14-实战篇--一个半月,我一个人和 Claude Code 搭出一套数字人工程
前端·后端·ai编程
你驴我7 小时前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
用户208046804567 小时前
Python3 注释编写完全指南:从基础规范到高效实践
后端
苏三说技术7 小时前
Jackson3来了,变化真大!
后端
Larcher7 小时前
LangChain RAG 排错实录:.env 为什么没有生效
vue.js·后端