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 脚本启…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
