当前位置: 首页 > 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 脚本启…...

CTF逆向实战:从RC4到Base64,手把手拆解CTFshow赛题

1. RC4加密实战:从文件分析到密钥破解 第一次接触CTF逆向题时,看到RC4加密可能会觉得无从下手。但实际拆解后你会发现,这类题目往往藏着明显的突破口。就拿CTFshow这道re2赛题来说,整个解题过程就像在玩解谜游戏。 用IDA打开题目…...

重装系统后的环境快速恢复:包含BERT模型部署的自动化脚本

重装系统后的环境快速恢复:包含BERT模型部署的自动化脚本 重装系统,对开发者来说,就像一场“数字大扫除”。清爽是清爽了,但看着空空如也的终端和待部署的一长串服务列表,那种从头再来的疲惫感瞬间涌上心头。尤其是当…...

轻量锐驰 x 轻量对象存储:构建个人专属高速云存储方案

1. 为什么你需要自建云存储? 每次用公共网盘传文件都像在参加龟速比赛?分享给朋友时对方总抱怨下载慢如蜗牛?我三年前就开始研究自建云存储方案,实测下来轻量锐驰服务器轻量对象存储的组合,速度能跑满家庭宽带上限&…...

抖音无水印下载完全指南:5分钟掌握批量下载核心技巧

抖音无水印下载完全指南:5分钟掌握批量下载核心技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

智能农业大棚设计详解

基于单片机的智能农业大棚设计温湿度二氧化碳光照(详细设计说明 10119-基于单片机的智能农业大棚设计温湿度二氧化碳光照(详细设计说明书proteus源代码原理图元件清单) 功能需求: 智慧农业大棚的底层理念是实现智能化控制与生产&a…...

佰力博金属电导率测试:精准赋能金属材料性能评估

金属电导率是衡量材料导电能力的核心指标,直接决定铜、铝、合金等在电子、电力、航空航天等领域的应用价值。佰力博检测依托专业技术与自研设备,构建了覆盖多场景、高精度的金属电导率测试体系,为材料研发、质量管控与工艺优化提供权威数据支…...

东华OJ-基础题-48-数列1(C++)

问题描述 思维的严密性是相当重要的,尤其是在程序设计中,一个小小的错误,就可能导致无法想象的后果。明明的爸爸是一名富有经验的程序设计专家,深知思维严密的重要性。于是在明明很小的时候,就通过游戏的方式训练明明的…...

Qwen3-1.7B推理模式切换体验:思考模式与非思考模式效果对比

Qwen3-1.7B推理模式切换体验:思考模式与非思考模式效果对比 1. 引言:双模式推理的创新价值 在边缘计算和轻量化AI模型快速发展的今天,Qwen3-1.7B通过独特的动态双模式架构,为用户提供了灵活的推理选择。这款17亿参数的轻量级大语…...

C++的std--ranges中的技术优化排序

C20引入的std::ranges库为算法操作带来了革命性改进,尤其在排序优化领域展现出强大的现代性。本文将深入探讨std::ranges如何通过结构化绑定、惰性求值和定制化投影等技术,实现更高效、更灵活的排序操作,为开发者提供超越传统STL的解决方案。…...

手把手教你用Simulink和Carsim 2019搭建车辆动力学模型(附二自由度模型源码)

从零构建车辆动力学联合仿真模型:Simulink与Carsim 2019实战指南 当你第一次打开Carsim和Simulink时,面对两个庞大软件的无缝对接需求,很容易陷入"从哪开始"的困惑。本文将带你一步步搭建完整的车辆动力学仿真环境,从软…...