【Python Web开发】01-Socket网络编程01

文章目录

    • 1.套接字(Socket)
      • 1.1 概念
      • 1.2 类型
      • 1.3 使用步骤

Python 的网络编程主要用于让不同的计算机或者程序之间进行数据交换和通信,就好像人与人之间打电话、发消息一样。

下面从几个关键方面通俗易懂地介绍一下:

1.套接字(Socket)

在 Python 网络编程里,套接字(Socket)是个很重要的概念。

你可以把它想象成电话,有了它,不同的程序之间才能建立连接、交换数据。在 Python 里,socket 模块提供了创建套接字的功能。

1.1 概念

你可以把套接字想象成是两部电话,每部电话都有一个独一无二的号码,通过这个号码就能和对方建立联系。在网络里,套接字就是程序的 “电话号码”,它代表了网络中某个程序的具体位置。

每个套接字都有一个对应的 IP 地址和端口号,IP 地址就像城市和街道的地址,而端口号则像是具体的门牌号,有了这两个信息,数据就能准确地发送到目标程序

1.2 类型

在 Python 网络编程中,有两种常见的套接字类型:

  • TCP 套接字(SOCK_STREAM):TCP(传输控制协议)套接字就像打电话,在数据传输前需要先建立连接,确保数据能可靠、有序地到达对方。一旦连接建立,通信双方就可以持续稳定地交换数据。它适用于对数据准确性要求较高的场景,比如网页浏览、文件传输等。

  • UDP 套接字(SOCK_DGRAM):UDP(用户数据报协议)套接字如同发消息,无需提前建立连接,直接把数据发送出去就行。不过,它不能保证数据一定能到达对方,也无法保证数据的顺序。但它的优点是传输速度快,常用于对实时性要求较高、对数据准确性要求相对较低的场景,像视频会议、在线游戏等。

1.3 使用步骤

  1. TCP 套接字使用步骤
  • 服务器端

    1. 创建套接字:借助 socket.socket() 函数创建一个 TCP 套接字。
    2. 绑定地址和端口:使用 bind() 方法把套接字和特定的 IP 地址、端口号绑定在一起。
    3. 监听连接:调用 listen() 方法让套接字开始监听客户端的连接请求。
    4. 接受连接:使用 accept() 方法接受客户端的连接请求,并且返回一个新的套接字对象和客户端的地址。
    5. 收发数据:利用新的套接字对象通过 send() 或 sendall() 方法发送数据,使用 recv() 方法接收数据。
    6. 关闭连接:通信结束后,使用 close() 方法关闭套接字。
  • 客户端

    1. 创建套接字:同样使用 socket.socket() 函数创建一个 TCP 套接字。
    2. 连接服务器:调用 connect() 方法连接到服务器的指定 IP 地址和端口号。
    3. 收发数据:通过 send() 或 sendall() 方法发送数据,使用 recv() 方法接收数据。
    4. 关闭连接:通信结束后,使用 close() 方法关闭套接字。

以下是简单的 TCP 套接字示例代码:

服务端:

# 服务器端代码
import socket# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)# 开始监听
server_socket.listen(1)print('服务器正在监听端口 8888...')while True:# 接受客户端连接connection, client_address = server_socket.accept()try:print(f'连接来自: {client_address}')# 接收数据data = connection.recv(1024)print(f'收到的数据: {data.decode()}')# 发送响应message = '你好,客户端!'connection.sendall(message.encode())finally:# 关闭连接connection.close()

客户端代码:

# 客户端代码
import socket# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 服务器地址和端口
server_address = ('localhost', 8888)# 连接服务器
client_socket.connect(server_address)try:# 发送数据message = '你好,服务器!'client_socket.sendall(message.encode())# 接收响应data = client_socket.recv(1024)print(f'收到服务器的响应: {data.decode()}')
finally:# 关闭连接client_socket.close()
  1. UDP 套接字使用步骤
  • 服务器端

    1. 创建套接字:使用 socket.socket() 函数创建一个 UDP 套接字。
    2. 绑定地址和端口:通过 bind() 方法把套接字和特定的 IP 地址、端口号绑定在一起。
    3. 收发数据:使用 sendto() 方法发送数据,使用 recvfrom() 方法接收数据。
    4. 关闭套接字:通信结束后,使用 close() 方法关闭套接字。
  • 客户端

    1. 创建套接字:使用 socket.socket() 函数创建一个 UDP 套接字。
    2. 收发数据:使用 sendto() 方法发送数据,使用 recvfrom() 方法接收数据。
    3. 关闭套接字:通信结束后,使用 close() 方法关闭套接字。

以下是简单的 UDP 套接字示例代码:

服务器端代码

# 服务器端代码
import socket# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定地址和端口
server_address = ('localhost', 9999)
server_socket.bind(server_address)print('服务器正在监听端口 9999...')while True:# 接收数据data, client_address = server_socket.recvfrom(1024)print(f'收到来自 {client_address} 的数据: {data.decode()}')# 发送响应message = '你好,客户端!'server_socket.sendto(message.encode(), client_address)

客户端代码

# 客户端代码
import socket# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 服务器地址和端口
server_address = ('localhost', 9999)# 发送数据
message = '你好,服务器!'
client_socket.sendto(message.encode(), server_address)# 接收响应
data, server = client_socket.recvfrom(1024)
print(f'收到服务器的响应: {data.decode()}')# 关闭套接字
client_socket.close()

套接字是 Python 网络编程的基础,理解它的概念、类型和使用方法,能帮助你实现不同程序之间的网络通信

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

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

相关文章

Git 配置 GPG 提交签名

使用 GPG 对 Git 提交进行签名,可以证明该提交确实是你本人提交的。这在团队协作和代码审核中非常有用,GitHub/GitLab 等平台也会显示 “Verified” 标签。 🧩 一、检查是否已安装 GPG gpg --version 如果未安装,可使用以下命令…

MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境

文章目录 一、服务器选型——给数据库一个舒适的家二、系统调优——打造高性能跑道三、MySQL配置——让数据库火力全开四、监控体系——数据库的体检中心五、备份恢复——数据安全的最后防线六、主从复制——数据同步的艺术七、安全加固——守护数据长城 引言:从小白…

实践项目开发-hbmV4V20250407-跨平台开发框架深度解析与VSCode一站式开发实践

跨平台开发框架深度解析与VSCode一站式开发实践 在当今多端应用开发需求激增的背景下,跨平台开发框架成为了众多开发者的首选。本文将围绕React Native、Taro及其结合方案,以及Uni-app、MUI、Quasar等轻量级框架展开详细分析,并探讨如何在VS…

Android15沉浸式界面顶部有问题

Android15沉浸式界面顶部有问题 往往开发人员的手机没这么高级,客户或者老板的手机是Android15的。 我明明就设了状态栏透明,我的手机也没问题。但Android15是有问题的。 先看下有问题的界面: 解决方案: 处理1: if (…

uni-app 状态管理深度解析:Vuex 与全局方案实战指南

uni-app 状态管理深度解析:Vuex 与全局方案实战指南 一、Vuex 使用示例 1. 基础 Vuex 配置 1.1 项目结构 src/ ├── store/ │ ├── index.js # 主入口文件 │ └── modules/ │ └── counter.js # 计数器模块 └── main.js …

【STM32单片机】#11 I2C通信(软件读写)

主要参考学习资料: B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装:STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…

每天一道面试题@第一天

1:TCP和UDP的区别,TCP为什么是三次握手,不是两次? 因为TCP是全双工协议,区别在于TCP可靠,UDP不可靠,效率更高。 详解: TCP(传输控制协议)和 UDP(…

一款强大的实时协作Markdown工具 | CodiMD 9.6K ⭐

CodiMD 介绍 CodiMD 是一个开源的实时协作 Markdown 笔记工具,它允许用户在任何平台上共同编辑 Markdown 文档。核心功能是实时协作,它允许多个用户同时编辑同一个文档,并实时看到彼此的更改。支持实时渲染预览,支持超多的富文本格…

若依如何切换 tab 不刷新

方法 如上图配置 菜单中选是否缓存:缓存 资料 前端手册 |RuoYi:

【浙江大学DeepSeek公开课】回望AI三大主义与加强通识教育

回望AI三大主义与加强通识教育 一、人工智能三大主义二、人工智能发展历程三、从 ChatGPT 到 DeepSeek四、人工智能通识教育五、人工智能的挑战与未来 一、人工智能三大主义 符号主义 :逻辑推理,将推理视为计算过程。如苏格拉底三段论,通过前…

边缘计算全透视:架构、应用与未来图景

边缘计算全透视:架构、应用与未来图景 一、产生背景二、本质三、特点(一)位置靠近数据源(二)分布式架构(三)实时性要求高 四、关键技术(一)硬件技术(二&#…

C++——多态、抽象类和接口

目录 多态的基本概念 如何实现多态 在C中,派生类对象可以被当作基类对象使用 编程示例 关键概念总结 抽象类 一、抽象类的定义 基本语法 二、抽象类的核心特性 1. 不能直接实例化 2. 派生类必须实现所有纯虚函数才能成为具体类 3. 可以包含普通成员函数和…

初级达梦dba的技能水准

在x86环境(windows、linux)安装单机软件,安装客户端创建过至少20套数据库,优化参数并更新过正式许可会用逻辑导出导入以及dmrman备份了解manager工具的使用配置sqllog日志,并能解释输出内容能够分析因磁盘空间不足、内…

监控页面卡顿PerformanceObserver

监控页面卡顿PerformanceObserver 性能观察器掘金 const observer new PerformanceObserver((list) > {}); observer.observe({entryTypes: [longtask], })

智能座舱测试内容与步骤

智能座舱的测试步骤通常包括以下环节: 1.测试环境搭建与准备 • 硬件需求分析:准备测试车辆、服务器与工作站、网络设备以及传感器和执行器模拟器等硬件设备。 • 软件需求分析:选择测试管理软件、自动化测试工具、模拟软件和开发调试工具等。…

Redis——网络模型

目录 前言 1.用户空间和内核空间 1.2用户空间和内核空间的切换 1.3切换过程 2.阻塞IO 3.非阻塞IO 4.IO多路复用 4.1.IO多路复用过程 4.2.IO多路复用监听方式 4.3.IO多路复用-select 4.4.IO多路复用-poll 4.5.IO多路复用-epoll 4.6.select poll epoll总结 4.7.IO多…

电力系统中为什么采用三相交流电?

电力系统中为什么采用三相交流电 电力系统中采用三相交流电,主要是因为它在输电效率、设备使用、能量传输平稳性等方面相比单相交流或直流电具有显著优势。下面我详细解释一下原因: 🌟 1. 提高输电效率(节省电缆材料)…

python简介与入门

目录 python初始 python的优势 python的特性 python的应用领域 Linux环境中安装python 下载python3.11.6 安装依赖包 解压python压缩包 安装python 编译及安装 建立软连接 测试python3运行 设置国内pip更新源 更新pip版本(必须更新) wind…

Web内网渗透知识大全

内网渗透 端口转发 需要三个主机,Windows7、Windows2016、kali Windows7为内网主机 Windows2016为跳板机 kali为攻击机 使用到的工具 netsh、MSF 我们先在Windows7上开启一个80服务,而这个80服务只能由Windows2016访问,kali不能访问 我们…

ffmpeg av_buffer_unref的逻辑实现; av_freep 和 av_freep函数的区别

av_buffer_unref 是 FFmpeg 中用于管理引用计数和内存释放的核心函数,其内部实现机制如下: ‌一、核心流程‌ ‌引用计数递减‌ 函数首先对 AVBufferRef 的 buffer->refcount 进行原子递减操作(通过 atomic_fetch_add_explicit 等机制保证…