Python进阶04-网络编程

news2025/7/5 12:21:24

零、文章目录

Python进阶04-网络编程

1、计算机网络

  • 网络相关知识请参考计算机网络详解
(1)IP地址的概念
  • IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。

image-20240818161632647

(2)IP地址的表现形式
  • IP 地址分为两类: IPv4 和 IPv6
  • IPv4 是目前使用的IP地址
  • IPv6 是未来使用的IP地址
  • IPv4 是由点分十进制组成
  • IPv6 是由冒号十六进制组成

image-20240818161741000

(3)查看计算机的IP地址
  • Linux 和 mac OS 使用 ifconfig 这个命令
  • Windows 使用 ipconfig 这个命令

image-20240818163355160

(4)检查网络是否正常
  • 检查网络是否正常使用 ping 命令

image-20240818163431113

(5)端口号
  • 每运行一个网络程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可。

image-20240818163546145

  • 每一个端口都会有一个对应的端口号,好比每个教室的门都有一个门牌号,想要找到端口通过端口号即可

image-20240818163632667

  • 操作系统为了统一管理这么多端口对端口进行了编号,端口号其实就是一个数字,端口号有65536个
  • 通信的流程:通过ip地址找到对应的设备,通过端口号找到对应的端口,然后通过端口把数据传输给应用程序。

image-20240818163935510

(6)端口号分类
  • 知名端口号:

知名端口号是指众所周知的端口号,范围从0到1023。这些端口号一般固定分配给一些服务,比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务。

  • 动态端口号:

一般程序员开发应用程序使用端口号称为动态端口号, 范围是从1024到65535。如果程序员开发的程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序使用。注:当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

2、TCP协议

(1)通信流程
  • 通过 IP 地址能够找到对应的设备,然后再通过端口号找到对应的端口,再通过端口把数据传输给应用程序。
  • 注意点:数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信,我们今天学习的 TCP就是其中一种协议。
(2)TCP概念
  • TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。

  • TCP通信步骤:

    • ① 创建连接
    • ② 传输数据
    • ③ 关闭连接

image-20240818164702214

(3)TCP特点
  • 面向连接
    • 通信双方必须先建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此连接,以释放系统资源。
  • 可靠传输
    • ① TCP采用发送应答机制
    • ② 超时重传
    • ③ 错误校验
    • ④ 流量控制和阻塞管理

3、Socket技术

(1)Socket套接字
  • socket (简称 套接字) 是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个 socket。

image-20240818173918804

(2)Socket 的作用与应用场景
  • Socket 的作用:负责进程之间的网络数据传输,好比数据的搬运工。
  • socket 使用场景:不夸张的说,只要跟网络相关的应用程序或者软件都使用到了 socket 。

image-20240818211642873

4、编码转换

(1)编码转换
  • 在计算机网络中,数据都是以二进制的形式进行传输的。所以在网络传输数据的时候,数据需要先编码转化为二进制(bytes)数据类型。

  • I Love Python => 字符串 => 转换为二进制数据 => 网络中传输

(2)转换函数

image-20240824211954400

数据转换方法说明:

函数名说明
encode编码 将字符串转化为字节码
decode解码 将字节码转化为字符串

字符串编码:

str.encode(encoding=”utf-8)

二进制解码:

bytes.decode(encoding=“utf-8)

5、TCP网络应用程序开发

(1)两种TCP网络应用程序开发
  • ① TCP 客户端程序开发:客户端程序是指运行在用户设备上的程序
  • ② TCP 服务端程序开发:服务端程序是指运行在服务器设备上的程序,专门为客户端提供数据服务。
(2)TCP 客户端程序开发流程
  1. 创建客户端套接字对象
  2. 和服务端套接字建立连接
  3. 发送数据
  4. 接收数据
  5. 关闭客户端套接字
(3)TCP 服务端程序开发流程的介绍
  • 创建服务端端套接字对象
  • 绑定端口号
  • 设置监听
  • 等待接受客户端的连接请求
  • 接收数据
  • 发送数据
  • 关闭套接字

image-20240818212126051

6、TCP 客户端程序开发

(1)开发 TCP 客户端程序步骤
  • ① 创建客户端套接字对象
  • ② 和服务端套接字建立连接
  • ③ 发送数据
  • ④ 接收数据
  • ⑤ 关闭客户端套接字
(2)Socket 类的使用
  • 导入 socket 模块:import socket
  • 创建客户端 socket 对象:socket.socket(AddressFamily, Type)
  • 参数说明:
    • AddressFamily 表示IP地址类型, 分为IPv4和IPv6
    • Type 表示传输协议类型
  • 方法说明:
    • connect((host, port)) :表示和服务端套接字建立连接, host是服务器ip地址,port是应用程序的端口号
    • send(data) :表示发送数据,data是二进制数据
    • recv(buffersize) :表示接收数据, buffersize是每次接收数据的长度
(3)TCP 客户端程序开发示例代码
'''
TCP客户端开发五步走:① 创建客户端套接字对象 ② 建立连接 ③ 发送数据 ④ 接收数据 ⑤ 关闭套接字对象
第一个知识点:
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.AF_INET :IP v4
socket.SOCK_STREAM :TCP协议
第二个知识点:
tcp_client_socket.connect() => 连接服务器端(IP地址和端口号) => 参数是一个元组(IP地址,端口号)
第三个知识点:发送send()、接收数据recv(),注意事项:无论信息的发送还是接收都必须使用二进制流数据
encode() : 把字符串转二进制流数据
decode() : 把二进制流数据转换为字符串
'''
import socket

# 第一步:创建客户端套接字对象
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 第二步:创建连接
tcp_client_socket.connect(('127.0.0.1', 8000))
# 第三步:发送数据到服务器端
tcp_client_socket.send('I Love Python!'.encode('gbk'))
# 第四步:接收服务器端返回的应答数据
content = tcp_client_socket.recv(1024).decode('gbk')
print(f'服务器端返回的内容:{content}')
# 第五步:关闭套接字对象
tcp_client_socket.close()
  • 服务器调试助手下载地址:https://pan.baidu.com/s/1BuHUWBZgsz8SQDWA-PJ0ag?pwd=1234

image-20240820220954000

7、TCP服务端程序开发

(1)开发 TCP 服务端程序步骤
  • ① 创建服务端端套接字对象
  • ② 绑定端口号
  • ③ 设置监听
  • ④ 等待接受客户端的连接请求
  • ⑤ 接收数据
  • ⑥ 发送数据
  • ⑦ 关闭套接字
(2)Socket 类的使用
  • 导入 socket 模块:import socket
  • 创建服务端 socket 对象:socket.socket(AddressFamily, Type)
  • 参数说明:
    • AddressFamily 表示IP地址类型, 分为IPv4和IPv6
    • Type 表示传输协议类型
  • 方法说明:
    • bind((host, port)) 表示绑定端口号, host 是 ip 地址,port 是端口号,ip 地址一般不指定,表示本机的任何一个ip地址都可以
    • listen (backlog) 表示设置监听,backlog参数表示最大等待建立连接的个数
    • accept() 表示等待接受客户端的连接请求
    • send(data) 表示发送数据,data 是二进制数据
    • recv(buffersize) 表示接收数据, buffersize 是每次接收数据的长度
(3)TCP 服务端程序开发示例代码
'''
TCP服务器端开发七步走:① 创建服务器端套接字对象 ② 绑定IP和端口 ③ 开始监听 ④ 接收客户端连接请求 ⑤ 接收数据 ⑥ 发送数据 ⑦ 关闭套接字对象
第一个知识点:创建服务器端套接字对象
socket.socket(socket.AF_INET => IP v4, socket.SOCK_STREAM => TCP协议)
第二个知识点:绑定IP和端口
bind(元组参数) => bind(('IP地址', 端口号 => 建议8000以后))
第三个知识点:设置监听 => 设置允许最大的监听数 => 128
listen(整数参数)代表最大允许连接的总数
第四个知识点:接收客户端连接请求(关键点、难点)
accept()方法:接收客户端连接,accept方法在接收数据的同时,如何识别到底是哪个客户端发起的连接呢?
'''
import socket

# 第一步:创建服务器端套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 第二步:绑定IP和端口
tcp_server_socket.bind(('', 8000))  # 如果是绑定本机,也可以不写IP地址,会自动绑定
# 第三步:设置监听
tcp_server_socket.listen(128)
# 第四步:接收客户端连接
new_socket, ip_port = tcp_server_socket.accept()
# 第五步:接收客户端发送过来的数据
content = new_socket.recv(1024).decode()  # decode不写编码,默认也是gbk
print(f'{ip_port}客户端发送过来的数据:{content}')
# 第六步:响应数据给客户端(应答机制)
new_socket.send('信息已收到,over!'.encode('gbk'))
# 第七步:关闭新套接字对象(不能收发消息了)与服务器端套接字对象(不能接收客户端连接了)
new_socket.close()
tcp_server_socket.close()
(4)TCP 服务端程序开发面向对象版本
'''
TCP服务器端开发七步走:① 创建服务器端套接字对象 ② 绑定IP和端口 ③ 开始监听 ④ 接收客户端连接请求 ⑤ 接收数据 ⑥ 发送数据 ⑦ 关闭套接字对象
通过面向对象开发 => 分析有哪些对象 => 创建类 => 属性和方法
服务器端对象 => 服务器端类
'''
import socket

# 第一步:创建WebServer类
class WebServer(object):
    # 第四步:定义魔术方法__init__()
    def __init__(self):
        # ① 创建服务器端套接字对象
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # ② 绑定IP和端口号
        self.tcp_server_socket.bind(('', 8000))  # 192.168.89.68
        # ③ 设置监听
        self.tcp_server_socket.listen(128)

    # 第五步:定义一个start()方法 => 接收客户端连接
    def start(self):
        # ④ 接收客户端连接(允许多个客户端同时连接)
        while True:
            new_socket, ip_port = self.tcp_server_socket.accept()
            # ⑤ 接收客户端发送过来的信息
            content = new_socket.recv(1024).decode('gbk')
            print(f'{ip_port}客户端发送过来的数据:{content}')
            # ⑥ 返回数据给客户端(响应数据)
            data = input('请输入您要回复的内容:')
            new_socket.send(data.encode('gbk'))
            new_socket.close()


# 第二步:实例化对象,调用__init__()初始化方法
ws = WebServer()
# 第三步:启动服务,接收客户端连接
ws.start()

# 遗留问题:整个程序其实目前位置只能接收一个客户端,接收其他客户端,必须等待上一个连接结束,才可以继续连接发送接收数据,因为我们目前编写的程序都是单进程!一个Python只能处理一个连接请求!
# 如何期望服务器端,可以同时处理多个客户端请求,怎么办呢?答:使用多任务编程 => 明天

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

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

相关文章

ArcGIS栅格裁剪与合并,制作等高线

1、下载高程数据(DEM) https://mp.weixin.qq.com/s/ewlUUVV0PwdcspPGtSdCog 项目区域对应的卫片,也可以在谷歌地图里看大致经纬度范围 2、项目区域 确定项目区域,例如某个县区范围 3、栅格裁剪与合并 将DEM多个栅格数据合并&#…

《黑神话:悟空》惊世背后,AI 究竟如何铸就数字人神话?

在游戏的广袤世界中,每一部新作的问世皆如一次扣人心弦的探险之旅。而《黑神话:悟空》的惊艳登场,无疑是一场震撼灵魂的奇幻冒险。它象征着中国游戏产业的一次石破天惊的飞跃,更是 AI 技术在游戏制作领域应用的杰出典范。 AI时代已…

【Pytorch】生成对抗网络实战

GAN框架基于两个模型的竞争,Generator生成器和Discriminator鉴别器。生成器生成假图像,鉴别器则尝试从假图像中识别真实的图像。作为这种竞争的结果,生成器将生成更好看的假图像,而鉴别器将更好地识别它们。 目录 创建数据集 定…

改变潜意识,让梦想照进现实

你是否经常感到困惑,为何努力不得其果?今天我们将一起探索如何通过重新规划潜意识,让你的内心世界和外在行动达到和谐统一,让潜意识成为你坚不可摧的后盾。 想象一下,如果你的潜意识全天候无休止地为你的梦想努力&…

故障电弧探测器在工业与民用建筑电气线路中的设计与应用

安科瑞徐赟杰 【摘要】:电气设备是建筑中不可缺少的一部分,具有较为重要的作用和意义,在应用过程中不仅能够提升建筑本身实用性能,而且可为消费者提供更加优良的生活环境。但设备一旦在运行过程中出现故障,不仅会影响…

合宙低功耗4G模组Air780EQ——硬件设计手册02

Air780EQ是一款基于移芯EC716E平台设计的LTECat1无线通信模组。 支持FDD-LTE/TDD-LTE的4G远距离无线 传输技术。 另外,模组提供了USB/UART/I2C等通用接口满足IoT行业的各种应用诉求。 本文将继续介绍合宙Air780EQ的硬件设计中的 应用接口,射频接口&am…

一分钟学会万用表

目录: 1、电池的安装 1)指针万用表 2)数字万用表 3)高精度表 2、表笔的分类 3、表笔安装 5、常用测量方法 1)二极管测量 2)电阻与通断测量 3)电压测量 4)电流测量 …

面对孩子自闭症,我们该怎么办?

当得知孩子被诊断为自闭症时,家长们往往会感到震惊、无助甚至绝望。然而,面对这一挑战,我们需要做的是保持冷静,积极寻找应对策略,为孩子创造一个充满爱与希望的环境。 深入了解自闭症是关键。自闭症是一种复杂的神经发…

八款精品图纸加密软件强力推荐2024年图纸加密软件最佳选择!

在数字化时代,设计图纸的安全问题越来越受到企业的重视。为了保障企业的知识产权和核心竞争力,选择一款合适的图纸加密软件显得尤为重要。以下是2024年八款精品图纸加密软件的强力推荐,它们各具特色,能够满足不同企业的需求。 1.…

视频美颜SDK的核心技术:打造智能化主播美颜工具详解

视频美颜SDK不仅提升了视频质量,还为主播们提供了智能化、个性化的美颜功能。那么,视频美颜SDK的核心技术究竟是什么?又是如何为主播打造智能化美颜工具的呢? 1.人脸检测与特征点识别 视频美颜SDK技术通过深度学习算法&#xff…

H5带建站时长可自定义背景官网/引导页源码

源码名称:带建站时长可自定义背景官网/引导页源码 源码介绍:一款带动态时间显示建站时长的引导页源码,可用于引导页、工作室官网、个人主页等。源码为H5自适应手机端、电脑端。 需求环境:H5 下载地址: https://www.…

nefu暑假集训2 ST表 个人模板+例题汇总

前言: 比较简单的一个算法了,原理相当于是用二进制优化的区间dp了,用于求一个区间的最大或最小值。其实这类问题一般用线段树就可以直接解决,但如果查询次数过多的话可能会超时,这时就是ST表出场的时候了,因…

遗产系统 legacy system 的定义和演化策略

原始英语叫做legacy system,被国内翻译成了“遗产系统”。实际上,legacy system,可以翻译为遗留系统、旧系统、老系统。 下文部分摘自《遗产系统及其解决方案的综述》一论文。 遗产系统的定义 遗产系统是 “一个已经运行了很长时间的&…

【初学人工智能原理】【13】LSTM网络:自然语言处理实践

前言 本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。 代码及工具箱 本专栏的代码和工具函数已经上传到GitHub:1571859588/xiaobai_AI: 零基础入门人工智能 (github.com),可以找到对应课程的代码 正文 上节…

虹科技术|全新Linux环境PCAN驱动程序发布!CAN/CAN FD通信体验全面升级!

全新8.17.0版本的PCAN-Linux驱动程序正式发布,专为CAN和CAN FD接口量身打造。无论是CAN 2.0 a/b还是CAN FD的PCAN硬件产品,都能在我们的新驱动下“驰骋自如”。想要体验字符模式设备驱动接口(chardev)的便捷,还是Socke…

Navicat Lite导入为SQL,然后到服务器的SQLServer Management 里执行时,报各种错误,是文件的Encoding不一致导致的解决

1、好多时候,本地的操作系统与服务器的操作系统不一致,有的时候也是历史原因,我们不得不用老旧的版本的数据库,比如 SQLServer 2008R2的数据库系统。 2、然后本地因为操作系统是win11的,导致这个SQLServer 2008R2根本…

【自动化测试】处理页面加载元素过慢以及页面中存在frame框架页问题

在自动化测试中,处理页面加载元素过慢以及页面中存在frame框架页等问题,需要采用一些特定的策略和技术来确保测试的顺利进行。下面我将分别针对这两个问题给出一些解决方案: 1. 处理页面加载元素过慢的问题 1.1 等待机制 显式等待&#xf…

如何在Mac上使用VMware配置Windows虚拟机

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:VMware Fusion 目录​​​​​​​ 1.下载windows虚拟机arm文件 2.打开VMware并拖入刚刚下载完成的iso文件 3.导入完成 4.固件类型 5.选择加密 6.完成 7.默认安装 8.现在安装…

NC 反转字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 写出一个程序…

《React Hooks:让你的组件更灵活》

前端开发中非常流行的React框架。React是一个用于构建用户界面的JavaScript库,尤其适用于构建复杂的单页应用。 React Hooks:让你的组件更灵活 React 是当今最受欢迎的前端 JavaScript 库之一,用于构建用户界面。自从 React 16.8 版本开始&a…