当前位置: 首页 > news >正文

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 在操作系统领域做出了许多重要的贡献,包括以下几个方面:

  1. 网络协议栈
    BSD UNIX 引入了 TCP/IP 协议栈作为其 默认 网络协议。并且,BSD UNIX 还对 TCP/IP 协议进行了许多 改进和优化BSD UNIX 的网络协议实现在当时是非常先进的,这为互联网的后续发展提供了借鉴。

  2. 套接字编程接口
    BSD UNIX 引入了 套接字(Socket)编程接口,它提供了一种 抽象的方式 来进行网络通信。套接字编程接口后来成为了 网络编程的标准,被许多操作系统所采用。

  3. 文件系统改进
    BSD UNIX 对文件系统进行了改进,引入了一些新的文件系统类型,如 Fast File System(FFS),提高了文件系统的 性能和可靠性

  4. 安全性增强
    BSD UNIX 引入了一些安全性增强功能,如访问控制列表(ACL)、加密文件系统等,提高了操作系统的 安全性

BSD UNIX 在不同的版本和分支中有许多 变体包括 BSD 4.2、BSD 4.3、BSD Lite、FreeBSD、NetBSD、OpenBSD等。这些变体在 BSD UNIX 操作系统的基础上进行了不同程度的 改进和扩展,逐渐形成了独立的操作系统。

许多现代的操作系统,包括 LinuxMacOS,都受到了 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 客户端通信的基本流程

服务器端

  1. 创建一个监听套接字对象,指定地址族(IPV4IPV6)和套接字类型(TCP 套接字UDP 套接字)。

  2. 通过使用 bind() 方法为监听套接字指定套接字地址。

  3. 调用 listen() 方法以指示监听套接字 开始 对客户端的连接请求进行监听。

  4. 通过调用 accept() 方法接受客户端的连接请求,该方法将返回一个连接套接字及客户端套接字的套接字地址。

  5. 通过连接套接字与客户端进行通信,使用 recv() 方法接收客户端发送的数据,使用 send() 方法向客户端发送响应。

  6. 重复步骤 5,直到通信完成。

  7. 关闭服务器套接字。

客户端

  1. 创建一个客户端套接字对象,并为该套接字指定 地址族套接字类型

  2. 调用 connect() 方法通过服务器的监听套接字向服务器端发起连接请求。

  3. 通过客户端套接字与服务器进行通信,使用 send() 向服务器发送数据,使用 recv()方法接收服务器端返回的响应。

  4. 重复步骤 3,直到通信完成。

  5. 关闭客户端套接字。

相关文章:

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&#xff0…...

电力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 脚本启…...

AI工具全景导航:从文本到视频,构建高效工作流

1. 项目概述:一份AI工具全景导航图 如果你和我一样,在过去一两年里被AI领域层出不穷的新工具、新模型搞得眼花缭乱,那么你肯定能理解整理一份清晰导航图的价值。我最初接触这个名为“Awesome-AI”的项目时,它还是一个相对简单的列…...

从代码片段到上下文理解:构建自动化代码分析工具的设计与实践

1. 项目概述:从代码片段到上下文理解的桥梁最近在和一些团队做代码审查和知识库梳理时,我反复遇到一个痛点:面对一个孤零零的函数或者类文件,即使代码写得再漂亮,也常常需要花费大量时间去追溯它的调用链路、依赖关系&…...

TIDAL音乐下载神器:tidal-dl-ng完整使用教程与配置指南

TIDAL音乐下载神器:tidal-dl-ng完整使用教程与配置指南 【免费下载链接】tidal-dl-ng TIDAL Media Downloader Next Generation! Up to HiRes / TIDAL MAX 24-bit, 192 kHz. 项目地址: https://gitcode.com/gh_mirrors/ti/tidal-dl-ng 还在为TIDAL高品质音乐…...

做海外盲盒APP选什么开发语言 稳定还适配欧美用户 太实用了

选对开发语言 才能适配欧美用户的使用习惯很多人做海外项目最容易踩的坑就是,用国内开发的逻辑直接套海外场景。做盲盒APP更是如此,不光要系统稳定不崩,还要适配欧美的网络环境、用户支付习惯,甚至不同地区的合规要求,…...

构建多模型智能客服时如何利用 Taotoken 管理后端调用

构建多模型智能客服时如何利用 Taotoken 管理后端调用 智能客服系统常常面临一个挑战:单一模型难以在所有场景下都表现出色。处理简单FAQ时,轻量模型成本更低;应对复杂逻辑推理时,则需要能力更强的模型。传统做法是为每个模型单独…...

金融级微服务通信协议设计:从MCP原理到Go语言实现

1. 项目概述:一个面向金融应用的现代通信协议最近在梳理一些开源金融科技项目时,我注意到了vivid-money/vivid-mcp这个仓库。对于从事支付、银行、金融科技后端开发,或者对高可靠、高性能的微服务间通信有需求的工程师来说,这类项…...

基于Claude AI的代码蓝图生成工具:从原理到实践的全方位解析

1. 项目概述与核心价值最近在开发者社区里,一个名为“claude-code-blueprint”的项目引起了我的注意。这个由faizkhairi创建的开源工具,本质上是一个基于Claude AI模型的代码生成与架构设计辅助系统。简单来说,它能够将自然语言描述的需求&am…...

从选型到实战:如何用INA220为你的Arduino/树莓派项目添加‘电量计’功能?

从选型到实战:如何用INA220为你的Arduino/树莓派项目添加‘电量计’功能? 在智能硬件开发中,精确监测电流、电压和功率消耗往往是项目成败的关键——无论是优化无人机续航、评估太阳能系统效率,还是分析智能家居设备的能耗特征。传…...

手把手教你为YOLOv8集成Deformable Attention:从看懂论文到跑通代码的避坑指南

深度解析YOLOv8集成可变形注意力机制的全流程实践 在计算机视觉领域,目标检测一直是研究热点,而YOLO系列算法凭借其出色的实时性能广受欢迎。最新一代的YOLOv8在精度和速度上达到了新的平衡,但仍有改进空间。本文将带您深入探索如何为YOLOv8集…...

多核处理器在嵌入式与通信领域的优化实践

1. 多核处理器在嵌入式与通信领域的价值突破十年前我刚入行嵌入式开发时,处理器的性能提升主要依赖制程工艺改进和主频提升。但自从2010年后,行业明显转向了多核架构的发展路线。这种转变在嵌入式与通信领域尤为明显——我们既要应对视频分析、5G信号处理…...