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

【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 网络编程的基础,理解它的概念、类型和使用方法,能帮助你实现不同程序之间的网络通信

相关文章:

  • 【Python爬虫基础篇】--3.cookie和session
  • 乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 现有一整型数组,a[8] = { 4,8,7,0,3,5,9,1},现使用堆排序的方式原地对该数组进行升序排列。那么在进行第一轮排序结束之后,数组的顺序为?
  • 【HTML】【Web开发】滑动条挑战
  • Docker的基本概念和一些运用场景
  • Linux[基础指令][2]
  • Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
  • Java中的方法重写(Override)与方法重载(Overload)详解
  • 位运算练习:起床困难综合征(贪心,位运算)(算法竞赛进阶指南学习笔记)
  • 关于ubuntu密码正确但是无法登录的情况
  • 互联网大厂Java面试:从基础到进阶的技术点探讨
  • 短信验证码安全实战:三网API+多语言适配开发指南
  • C语言学习记录(17)编译和链接
  • vue3 + element-plus中el-drawer抽屉滚动条回到顶部
  • Scenario Dreamer:用于生成驾驶模拟环境的矢量化潜扩散模型
  • 【Linux禁用历史命令】
  • 从零开始配置 Zabbix 数据库监控:MySQL 实战指南
  • SSH 互信被破坏能导致 RAC 异常关闭吗
  • 脚本备份数据
  • 热敏电阻的应用说明
  • 游客大理古城买瓜起争执:170克手机称出340克
  • 金光耀:被激活的复旦记忆
  • 特朗普:无意解雇鲍威尔,但美联储应该降低利率
  • 翁东华卸任文和友小龙虾公司董事,此前抢镜“甲亢哥”惹争议
  • 马上评|与其争论董宇辉该不该获奖,不如多关心文学
  • 上海农房翻建为何难?基层盼政策适度松动