Socket 编程:基础概念辨析
文章目录
- 参考
- Socket API
- BSD UNIX 操作系统
- BSD UNIX 与 Socket API
- Socket
- 套接字
- 套接字地址
- 套接字 VS 套接字地址
- 套接字的表示方法
- TCP 套接字与 UDP 套接字
- TCP 套接字
- 监听套接字
- 连接套接字
- UDP套接字
- TCP 服务器端与 TCP 客户端通信的基本流程
- 服务器端
- 客户端
参考
| 项目 | 描述 |
|---|---|
| 刘—手 | python–socket模块 |
| Python 官方文档 | https://docs.python.org/zh-cn/3/ |
| 搜索引擎 | Google 、Bing |
Socket API
BSD UNIX 操作系统
BSD(Berkeley Software Distribution) 是一个基于 UNIX 操作系统的分支,最早由 加州大学伯克利分校 开发并发布。BSD UNIX 的发展 始于 20 世纪 70 年代末,它是对 AT&T UNIX 的改进和扩展。

BSD UNIX 的目标是提供一个 高度可靠、可扩展和自由开放的操作系统,以 满足学术和研究机构的需求,BSD UNIX 的发展着重于对网络和分布式系统的支持,以及在可移植性、稳定性和安全性方面的改进。
BSD UNIX 在操作系统领域做出了许多重要的贡献,包括以下几个方面:
-
网络协议栈
BSD UNIX 引入了TCP/IP协议栈作为其默认网络协议。并且,BSD UNIX 还对TCP/IP协议进行了许多改进和优化。BSD UNIX的网络协议实现在当时是非常先进的,这为互联网的后续发展提供了借鉴。 -
套接字编程接口
BSD UNIX 引入了套接字(Socket)编程接口,它提供了一种抽象的方式来进行网络通信。套接字编程接口后来成为了网络编程的标准,被许多操作系统所采用。 -
文件系统改进
BSD UNIX 对文件系统进行了改进,引入了一些新的文件系统类型,如Fast File System(FFS),提高了文件系统的性能和可靠性。 -
安全性增强
BSD UNIX 引入了一些安全性增强功能,如访问控制列表(ACL)、加密文件系统等,提高了操作系统的安全性。
BSD UNIX 在不同的版本和分支中有许多 变体,包括 BSD 4.2、BSD 4.3、BSD Lite、FreeBSD、NetBSD、OpenBSD等。这些变体在 BSD UNIX 操作系统的基础上进行了不同程度的 改进和扩展,逐渐形成了独立的操作系统。
许多现代的操作系统,包括 Linux 和 MacOS,都受到了 BSD UNIX 的影响,并从中借鉴了许多设计和实现上的思想。

BSD UNIX 与 Socket API
socket 的概念最早起源于 BSD(Berkeley Software Distribution)UNIX 类的操作系统。BSD UNIX 是一种 UNIX 操作系统的变种,最早由加州大学伯克利分校开发并发布。
在 BSD UNIX 中,套接字(socket)是一种抽象的通信端点,用于在不同的进程之间进行网络通信。套接字提供了一种机制,使得进程可以通过网络发送和接收数据。

BSD UNIX 的套接字 API(Application Programming Interface) 定义了一组函数和数据结构,用于创建、绑定、连接、发送和接收数据等操作。这些 API 为网络编程提供了底层的支持,使得开发者可以使用套接字进行跨网络的通信。
后来,BSD UNIX 的套接字 API 成为了其他操作系统的基础,并逐渐演化成为了现代操作系统中使用的标准网络编程接口。因此,在当前常见操作系统中,仍然使用 BSD UNIX 套接字 API 或其衍生版本来进行网络编程。
Python 的 socket 模块就是基于 BSD UNIX 套接字 API 开发的,它提供了对网络编程的高级封装,使得开发者可以更方便地进行网络通信。
Socket
套接字
套接字(Socket) 是一种 抽象的通信端点,用于在计算机网络中进行 进程间的通信。套接字提供了一种编程接口,允许不同的计算机通过网络发送和接收数据。

注:
在 Socket 编程 中,TCP 和 UDP 协议是最常见和广泛使用的协议之一。套接字编程接口支持多种协议,包括但不限于 TCP 和 UDP 。
套接字地址
套接字 VS 套接字地址
套接字(Socket) 是一种 抽象的通信端点,用于在计算机网络中进行 进程间的通信。
套接字地址(Socket Address) 是套接字在 网络中的唯一标识,用于确定通信的目标。套接字地址由 IP 地址 和 端口号 组成,分别用于标识 主机 和 进程。
套接字的表示方法
在 Python 网络编程中,套接字地址通常使用元组(Tuple)来进行套接字地址的存取。
举个栗子
('127.0.0.1', 80) # 目标套接字位于本机的 80 号端口
('8.8.8.8', 53) # 目标套接字位于 IP 地址为 8.8.8.8 的主机的 53 号端口
TCP 套接字与 UDP 套接字
TCP(传输控制协议) 和 UDP(用户数据报协议) 是两种常见的网络传输协议。在这两种协议下,套接字的行为和特性 有所不同。

TCP 套接字
TCP 是一种 面向连接 的协议,提供可靠的、有序的、双向的数据传输。在 TCP 通信过程中,涉及到两种类型的套接字,即 监听套接字(Listening Socket) 和 连接套接字(Connected Socket)。
监听套接字
监听套接字用于接受客户端的连接请求。服务器在 启动时创建 一个监听套接字,并通过调用 bind() 方法绑定到一个特定的 套接字地址(IP 地址及端口号的组合)。然后,服务器通过调用 listen() 方法 开始监听 客户端的连接请求。
监听套接字等待客户端的连接请求,一旦有客户端连接请求到达,就会 接受连接 并 创建 连接套接字。监听套接字 通常 只有一个,用于接受一个或多个客户端的连接请求。
连接套接字
连接套接字用于 建立和维护 TCP 连接。当一个客户端与服务器建立连接时,服务器会创建一个连接套接字来处理与该客户端的通信。连接套接字是通过在服务器上调用 accept() 方法而创建的。
连接套接字具有 已经建立 的 TCP 连接,包含了客户端和服务器之间的通信通道。通过连接套接字,可以进行 双向的可靠数据传输,保证数据的顺序和完整性。
UDP套接字
UDP 是一种 无连接 的协议,提供不可靠的、无序的数据传输。与 TCP 不同,UDP 在传输数据时 不会建立持久的连接。因此,UDP 套接字存在连接套接字和监听套接字之别。
TCP 服务器端与 TCP 客户端通信的基本流程

服务器端
-
创建一个监听套接字对象,指定地址族(
IPV4或IPV6)和套接字类型(TCP 套接字或UDP 套接字)。 -
通过使用
bind()方法为监听套接字指定套接字地址。 -
调用
listen()方法以指示监听套接字开始对客户端的连接请求进行监听。 -
通过调用
accept()方法接受客户端的连接请求,该方法将返回一个连接套接字及客户端套接字的套接字地址。 -
通过连接套接字与客户端进行通信,使用
recv()方法接收客户端发送的数据,使用send()方法向客户端发送响应。 -
重复步骤
5,直到通信完成。 -
关闭服务器套接字。

客户端
-
创建一个客户端套接字对象,并为该套接字指定
地址族和套接字类型。 -
调用
connect()方法通过服务器的监听套接字向服务器端发起连接请求。 -
通过客户端套接字与服务器进行通信,使用
send()向服务器发送数据,使用recv()方法接收服务器端返回的响应。 -
重复步骤
3,直到通信完成。 -
关闭客户端套接字。
相关文章:
Socket 编程:基础概念辨析
文章目录 参考Socket APIBSD UNIX 操作系统BSD UNIX 与 Socket API Socket套接字套接字地址套接字 VS 套接字地址套接字的表示方法 TCP 套接字与 UDP 套接字TCP 套接字监听套接字连接套接字 UDP套接字 TCP 服务器端与 TCP 客户端通信的基本流程服务器端客户端 参考 项目描述刘…...
git lfs下载指定文件git lfs pull --include=“*.bin“
git lfs pull --include"*.bin"...
JavaScript 数组 函数
目录 1.数组的概念 2.创建数组 2.1 数组创建的方式 2.2利用new 创建数组 2.3 利用数组字面量创建数组 2.4 数据元素的类型 3.获取数组当元素 3.1数组元素的索引 4.遍历数组 4.1数组的长度 5.数组中新增元素 5.1通过修改length 长度新增数组元素 5.2通过修改数组索引…...
【哈佛积极心理学笔记】第7讲 逆境还是机遇
第7讲 逆境还是机遇 How can we raise base level? One of the things is coping, putting ourselves on the line. How to become an optimist. Optimism as an interpretation style, not as a Pollyannaish feel good kind of approach. Three approaches: First is to t…...
java springboot整合MyBatis做数据库查询操作
首先 我们还是要搞清楚 MyBatis 工作中都需要那些东西 首先是基础配置 你要连哪里的数据 连什么类型的数据库 以什么权限去连 然后 以 注解还是xml方式去映射sql 好 我们直接上代码 我们先创建一个文件夹 然后打开idea 新建一个项目 然后 按我下图的操作配置一下 然后点下一…...
11 二阶矩方法和Lovasz局部引理
文章目录 11 二阶矩方法和Lovasz局部引理11.1 The Second-Moment Method——二阶矩方法11.1.1 二阶矩方法定理11.1.2 二阶矩方法的应用——随机图阈值 11.2 Lovasz Local Lemma——Lovasz局部引理11.2.1 LLL定理11.2.2 LLL定理证明 11.3 Asymmetric LLL 11 二阶矩方法和Lovasz局…...
低代码赛道拥挤 生态聚合成为破局关键
在云计算和移动互联网的强劲推动下,企业数字化转型的步伐正在加速,对于软件应用开发的需求也呈现出爆发式的增长。这样的背景下,低代码平台凭借其独特的优势迅速崛起并引发了业界的广泛关注。 自2020年以来,低代码领域已成为投资…...
B+树:高效存储与索引的完美结合
目录 引言:一、定义:二、B树和B树三、特点:四、应用场景:总结: 引言: 在计算机科学领域中,数据结构的选择对于高效存储和索引数据至关重要。B树(B tree)作为一种自平衡的…...
左右排版的PDF,如何转换为单栏排版的word?
将左右排版的PDF转换为单行排版的WORD文字版需要进行以下步骤: 1. 使用PDF转换工具将PDF转换为WORD格式。有很多在线或离线的PDF转WORD工具可供选择,例如金鸣表格文字识别、Adobe Acrobat、Smallpdf、Zamzar等。 2. 打开WORD文档后,选择“页…...
D349周赛:注意题目提示里,数据范围隐含的算法复杂度提示
文章目录 6470.既不是最大值也不是最小值完整版为什么两个for循环时间复杂度还是不变的 6465.执行子串操作后的字典序最小字符串思路最开始的写法题意理解的问题 修改版a必须单独拿出来的原因 6449.收集巧克力思路注意提示信息 完整版补充:由数据范围反推算法复杂度…...
iOS -- block one
demo贴上我的github blockOne 块类似于匿名函数或闭包,在许多其他编程语言中也存在类似的概念。 Block 以下是块的一些基本知识: 块的定义:块是由一对花括号 {} 包围的代码片段,可以包含一段可执行的代码。块的定义使用 ^ 符号…...
第十二篇:强化学习SARSA算法
你好,我是郭震(zhenguo) 今天强化学习第二十篇:强化学习SARSA算法 1 历史 SARSA(「State-Action-Reward-State-Action」)算法是一种经典的强化学习算法,用于解决马尔可夫决策过程(MDP࿰…...
电力vr智能巡检模拟实操教学灵活性高成本低
传统电力智能运检服务培训采用交接班期间开展智能带电检测仪器的操作培训,教学时间、场地及材料有限,有了VR技术,将推动电力智能运检服务培训走向高科技、高效率和智能化水平。 深圳华锐视点凭借着对VR实训系统的深入研发和升级,多…...
vscode右键点击,松开后自动触发鼠标所在位置的按钮(误触发双击效果)
例如如下,右键展开菜单,松手会自动触发转到声明功能 解决方案: 1、安装easystroke sudo apt-get install easystroke 2、打开easystroke,选择preferences tab 3、点击Gesture Button,在出现的框中右键单击一次 4、点…...
【UE5】分分钟简单使用像素流云服务(Pixel Streaming)
【UE5】分分钟简单使用像素流云服务(Pixel Streaming) 前言 UE5的Pixel Streaming已经封装的很好,简单三步实现简单的服务搭建。 安装插件打包项目运行服务 注:实例平台为Windows 安装插件 编辑→插件→输入查询Pixel Strea…...
2021 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题
2021 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题 一. 逻辑推理:第 26~55 小题,每小题 2 分,共 60 分。下列每题给出的 A、B、C、D、E 五个选项中,只有一项是符合试题要求的。 26.哲学是关于世界观、方法论的学问。哲…...
【算法】【算法杂谈】两个排序数组中找第k小的数
目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…...
ABAP 新语法--Open SQL(草稿)
1. 常量 1.1 常量赋值 常量字段可以用来为内表中的部分字段赋初始值,字段类型和长度依据输入常量的值决定 SELECTmara~matnr, " 物料号mara~matkl, " 物料组mara~mtart, " 物料类型 AS lkenz, " 删除标识,常量空字符串123 AS fla…...
2023最新常用开发网站汇总
1、在线画图工具 • 在线画图工具ProcessOn:https://www.processon.com/ • 在线画图工具draw.io:https://app.diagrams.net/ • 在线思维导图工具:http://www.mindline.cn/webapp • PlantUML在线编辑器:http://haha98k.com/…...
ELK 日志采集使用
1.安装ELK整体环境 1.1.安装docker环境 Docker 最新版Version 20.10安装_docker最新版本是多少_猿小飞的博客-CSDN博客 1.2.先安装docker compose 安装docker compose_猿小飞的博客-CSDN博客 1.3.使用 Docker Compose 搭建 ELK 环境 1.3.1.编写 docker-compose.yml 脚本启…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
