Python之socket编程(53)

news2024/11/28 10:57:15

​小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

今天的内容比较多哦,主要是网络编程的一些入门知识。

这些知识在互联网发展过程中很重要,猫妹抛砖引玉。

OSI七层模型和TCP/IP四层模型

IP地址和端口

TCP/UDP

socket

Python实现TCP服务器客户端

Python实现UDP服务器客户端

OSI七层模型和TCP/IP四层模型

OSI七层模型和TCP/IP四层模型是互联网通信的基石,我们之所以可以愉快地上网,底层就是它的功劳。

它们在底层默默工作,我们仿佛感觉不到它的存在。其实底层的设计和实现汇集了众多人类的智慧。

OSI七层模型和TCP/IP四层模型都是网络通信中常用的分层架构。

OSI七层模型更加详细,涵盖了更多的功能和细节;而TCP/IP四层模型则更加简洁明了,便于理解和应用。

下面分别对它们进行简要介绍:

OSI七层模型:

OSI(Open Systems Interconnection)是一种定义了网络通信协议栈的国际标准。它将网络通信分为七个层次,每一层都有特定的功能和任务。从底层到顶层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  * 物理层:负责在物理媒介上传输比特流,主要涉及硬件接口和信号传输。

  * 数据链路层:负责在相邻节点之间建立可靠的数据传输通路,实现数据的分组和错误检测。

  * 网络层:负责将数据包从源节点发送到目的节点,实现端到端的连接。

  * 传输层:负责控制和管理数据传输过程中的流量控制、错误恢复和数据重组等。

  * 会话层:负责建立、管理和终止应用程序之间的会话。

  * 表示层:负责数据的格式转换、加密和解密等。

  * 应用层:负责为用户提供各种网络应用服务,如电子邮件、文件传输、远程登录等。

TCP/IP四层模型:

TCP/IP(Transmission Control Protocol/Internet Protocol)是一种广泛应用于互联网的分层架构。它将网络通信分为四个层次,每一层都有特定的功能和任务。从底层到顶层分别是:网络接口层、网际层、传输层和应用层。

  * 网络接口层:负责处理数据包的物理介质(如以太网、Wi-Fi等)以及地址和路由选择等问题。

  * 网际层:负责在不同网络之间建立逻辑连接,实现端到端的数据传输。

  * 传输层:负责控制和管理数据传输过程中的流量控制、错误恢复和数据重组等。

  * 应用层:负责为用户提供各种网络应用服务,如电子邮件、文件传输、远程登录等。

IP地址和端口

我们要上网,离不开两个东西,一个是IP地址,一个是端口。

IP地址和端口是网络通信中两个重要的概念,它们共同用于在互联网上唯一标识一个设备或应用服务。

IP地址用于在数据包头中指明源设备的地址,而端口号则用于在网络上唯一标识一个应用服务。

IP地址唯一标识一台连接在互联网上的电脑。

IP(Internet Protocol)地址是一个32位的二进制数,用于在互联网上唯一标识一个设备。

IP地址分为IPv4和IPv6两种格式。

IPv4地址通常以点分十进制表示法(如192.0.2.1),而IPv6地址则采用冒号分隔的128位十六进制数(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

IP地址用于在数据包头中指明源设备的地址,以便接收方能够将数据包正确地发送到目标设备。

有了IP地址还不够,一台电脑有许多应用程序,端口用于区分应用程序。

端口(Port)是网络通信中设备之间进行通信的逻辑接口。

取值0~65535,0~1023系统占用,其他端口应用程序随机分配。

每个应用程序都使用一个唯一的端口号来标识自己的通信服务。

常见的端口号有80(HTTP)、21(FTP)、25(SMTP)、3306(MySQL)等。

TCP和UDP

TCP和UDP位于TCP/IP四层模型中的传输层。

TCP(Transmission Control Protocol)特点:

可靠性高:TCP是一种面向连接的协议,它通过建立可靠的连接来保证数据传输的可靠性。当数据包在传输过程中丢失或损坏时,TCP会进行重传,直到数据被完全接收。

流控制:TCP使用滑动窗口机制来控制数据的发送速率,避免网络拥塞。发送方会根据接收方的缓冲情况动态调整发送速率。

有序性:TCP保证数据包的顺序性和完整性,确保接收方能够按照正确的顺序接收到数据。

适用场景:TCP适用于需要可靠数据传输的应用场景,如文件传输、电子邮件等。

UDP特点:

不可靠性高:UDP是一种无连接的协议,它不保证数据传输的可靠性。当数据包在传输过程中丢失或损坏时,UDP不会进行重传,而是直接丢弃。

快速性:UDP没有复杂的控制流程,因此具有较快的传输速度和较低的延迟。

无序性:UDP不保证数据包的顺序性和完整性,接收方可能收到乱序的数据包。

适用场景:UDP适用于对实时性要求较高、不需要可靠数据传输的应用场景,如视频流媒体、在线游戏等。

TCP就像打电话,对方必须在线才能通过。

UDP就像写信,写好直接发送就是了。

没有优劣,各有千秋。

socket

TCP/UDP是很复杂的,为了使应用开发更简单。

在应用层和TCP/UDP之间有一层,叫socket。

Socket(套接字)是计算机网络编程中的一种通信机制,用于实现不同计算机之间的数据传输。

简单来说,Socket就是一种用于建立网络连接的抽象接口,它允许程序员通过网络协议进行数据传输。

在网络编程中,Socket通常由两部分组成:客户端和服务器端。

客户端发送数据到服务器端,而服务器端接收并处理这些数据。

Socket通信可以基于TCP(传输控制协议)或UDP(用户数据报协议)两种不同的协议。

使用Socket进行网络编程需要以下步骤:

  1. 创建Socket对象:首先需要创建一个Socket对象,指定要使用的协议类型。

  2. 绑定Socket:将Socket与特定的IP地址和端口号绑定在一起,以便客户端能够找到服务器端。

  3. 连接Socket:当客户端想要与服务器端通信时,需要建立连接。这可以通过调用Socket对象的connect()方法来实现。

  4. 发送和接收数据:一旦连接建立成功,就可以使用Socket对象的send()和recv()方法来发送和接收数据。

  5. 关闭Socket:当通信完成后,需要关闭Socket对象以释放资源。

总之,Socket是网络编程中非常重要的一个概念,它提供了一种通用的、跨平台的通信机制,使得程序员可以轻松地实现不同计算机之间的数据传输。

Python实现TCP服务器客户端

TCP客户端服务器交互流程图:

socket关键函数介绍:

函数描述
socket()获取socket类对象
bind((hostname, port))在指定主机的端口绑定监听
listen()在绑定端口上开启监听,参数表示最大等待建立连接的个数
accept()等待客户端连接,连接后返回客户端地址
send(data)发送数据,data 是二进制数据
recv(buffer)表示接收数据, buffersize 是每次接收数据的长度
close()关闭套接字连接
connect((hostname, port))设置要连接的主机名称与端口号

TCP协议客户端服务器代码测试:

注:服务端可以持续监听连接,客户端下线,服务端自动断开连接。客户端再次上线,服务端建立连接。

Python实现UDP服务器客户端

UDP客户端服务器交互流程图:

客户端流程:

  1. 导入包socket

  2. 创建一个套接字

  3. 收发消息(优先发送)

  4. 关闭套接字

服务器流程:

  1. 导入包socket

  2. 创建一个套接字

  3. 绑定信息

  4. 收发消息(优先接收)

  5. 关闭套接字

UDP协议客户端服务器代码测试:

需要代码的小伙伴,可从和猫妹学Python,下图第一名平台的次条推文获取哦!

平台太多了,代码排版太耗时了。

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中final关键字的理解(多线程中的final)

一、final关键字 Java中的final关键字具有不可变性的特性,其可以修饰类、方法和变量。 1. final修饰类:final关键字可以用来修饰类,表示该类是不可继承的。final类中的所有方法都是隐式final的(不能被override或shadow&#xff0…

【深度学习-第1篇】深度学习是什么、能干什么、要怎样学?

大概4年前本专栏发布了一篇关于神经网络的入门科普文章,到现在大概有小5k赞了(Mr.看海:神经网络15分钟入门!足够通俗易懂了吧)。 这几年人工智能发生了突飞猛进的发展,时至今日甚至发展出了GPT-4、Midjourn…

经典高并发服务器设计逻辑

都是面试必问的八股,不管理不理解用不用得上,背就完事了。 服务器模型 对于并发量比较大的服务器,即listen监听端口一直忙碌于处理新建连接的场景,一般在主线程里面accept新的客户端连接并生成新连接的socket,然后将这…

Unity制作二次元卡通渲染角色材质——2、色阶化光影的多种做法对比

Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 这里继续讲二次元角色渲染。之前说过,最基本的卡通渲染,包含了色阶化光影和描边二个元素。所以这里先来说一下色阶化光影的多种做法对比。 一、光照模型和色阶化的说明 从上一篇文章里…

拿捏-哈夫曼树构建及编码生成(建议收藏)

文章目录 哈夫曼树的基本概念哈夫曼树的构建构建思路代码实现 哈夫曼编码的生成编码生成思路代码实现 完整代码展示及代码测试 哈夫曼树的基本概念 在认识哈夫曼树之前,你必须知道以下几个基本术语: 1、什么是路径? 在一棵树中,从…

Kafka 分区

分区是 Kafka 的核心功能,对于 Kafka 的存储结构、消息的生产消费方式都至关重要。 Partition(分区) 每 topic 都可以分成多分区,每个分区都是一组有序的、不可变的记录序列,每个分区在存储层面是 append log 文件。…

python中Requests发送json格式的post请求方法

问题:做requests请求时遇到如下报错: {“code”:“500”,“message”:"JSON parse error: Cannot construct instance of com.bang.erpapplication.domain.User (although at least one Creator exists): no String-argument constructor/factory …

唠一唠程序员的那些事

作为一名互联网摸爬滚打多年的老兵,我可以从以下角度提供一些信息: 加班是家常便饭:程序员往往需要加班来满足项目需求或完成任务。这意味着他们经常会在晚上、周末或节假日工作。代码不仅仅是工作:对于大多数程序员来说&#xff…

【C++】成员对象和成员函数分开存储

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、详解 3、代码清单 1 3.1、类中定义成员变量 3.2、类中定义成员函数 4、代码清单 2 5、总结 1、缘起 “成员变量…

SpringBoot 增强Controller方法,@ControllerAdvice注解的使用

参考资料 ControllerAdvice 用法SpringBoot使用ControllerAdvice注解 目录 一. ControllerAdvice注解作用二. ControllerAdvice注解 assignableTypes属性2.1 ControllerAdvice增强类2.2 Controller层2.3 效果 三. ControllerAdvice注解 basePackages属性3.1 ControllerAdvic…

踩坑|以为是Redis缓存没想到却是Spring事务!

前言 最近碰到了一个Bug,折腾了我好几天。并且这个Bug不是必现的,出现的概率比较低。一开始我以为是旧数据的问题,就让测试重新生成了一下数据,重新测试。由于后面几轮测试均未出现,我也就没太在意。 可惜好景不长&…

【LeetCode】260. 只出现一次的数字 III

260. 只出现一次的数字 III(中等) 思路 这道题是136. 只出现一次的数字 的进阶版,需要找出两个仅出现一次的元素。有了上一题的基础,我们很容易就想到要用异或来解决,但是由于这题最终会剩下两个不同的元素&#xff0…

设置和使用DragGAN:搭建非官方的演示版

DragGAN的官方版还没有发布,但是已经有非官方版的实现了,我们看看如何使用。DragGAN不仅让GAN重新回到竞争轨道上,而且为GAN图像处理开辟了新的可能性。正式版本将于本月发布。但是现在已经可以在一个非官方的演示中试用这个新工具了 DragGAN…

数据结构:二叉树(初阶)

朋友们、伙计们,我们又见面了,本期来给大家解读一下二叉树方面的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 …

Unix/C/C++进阶--SocketCAN 编程

Unix/C/C进阶--SocketCAN 编程 1 介绍1.1 socketcan 简介1.2 can 发展历程1.3 can总线优点 2 知识点2.1 CAN详解--书籍、网站2.2 CAN详解--CAN与com口介绍2.3 CAN详解--各家CAN分析仪与软件的比较2.4 转载:CAN总线终端电阻2.5 如何破解汽车--CAN协议(can…

3.8 电路布线

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.最优子结构的证明: 我的理解: 对于电路布线问题的最优子结构性质,我们可以通过数学推导进行证明。下面是对证明的…

conda在 powershell下不能激活虚拟环境

这里写自定义目录标题 问题原因解决办法增加环境变量修改PowerShell 策略初始化conda环境安装或更新conda 结果 问题原因 powershell正常是不行的,但是在cmd中是可以的 问题产生的原因有很多: 必须无法识别activate.bat激活无反应 解决办法 增加环…

【JavaSE】Java基础语法(四十六):枚举

文章目录 1. 概述2. 定义格式3. 枚举的特点4. 枚举的方法 1. 概述 枚举是一种特殊的数据类型,它列出了一组预定义的常量,并使用标识符来引用这些常量。枚举的用途很广泛,下面列举了几个常见的应用场景: 管理常量:如果您…

计算机组成原理---第三章存储系统 习题详解版

(一)精选课内习题 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 (二)精选课后习题 1.设有一个具有20位地址和32位字长的存储器,问: (1)该存储器能存储多少个字节的信息? (2)如果存储器由512k8位的SR…

Linux :: vim 编辑器:详解:文本复制/粘贴/剪切/删除 与 撤销普通操作及撤销撤销操作

前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 前文&#x…