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

相关推荐
databook22 分钟前
逃离SQL丛林:实用主义的数据救赎
后端·sql·数据分析
患得患失94942 分钟前
【前端WebSocket】心跳功能,心跳重置策略、双向确认(Ping-Pong) 以及 指数退避算法(Exponential Backoff)
前端·websocket·算法
舒一笑1 小时前
AI 系统落地难的,从来不只是模型:一次企业级部署实施复盘
运维·后端·程序员
心勤则明1 小时前
Spring AI Alibaba Skills 的渐进式披露与热更新实战
java·后端·spring
金融数据出海2 小时前
java对接美股股票api涵盖实时行情、K 线、指数等核心接口。
后端
认真的小羽❅2 小时前
从入门到精通:Spring Boot 整合 MyBatis 全攻略
spring boot·后端·mybatis
摆烂工程师2 小时前
教你如何查询 Codex 最新额度是多少,以及 ChatGPT Pro、Plus、Business 最新额度变化
前端·后端·ai编程
任聪聪2 小时前
我做了一款通用本地化部署模型运行调度器,运行所有大模型!
后端
开发者如是说2 小时前
可能是最好用的多语言管理工具
android·前端·后端
何陋轩4 小时前
AI时代,程序员何去何从?别慌,看完这篇你就明白了
后端·面试