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

【Python网络编程基础】

文章目录

  • 一、网络编程基础概念
    • 1.1 网络通信协议
    • 1.2 IP地址与端口号
  • 二、使用 `socket` 模块进行网络编程
    • 2.1 创建 TCP 服务器和客户端
      • TCP服务器
      • TCP客户端
    • 2.2 使用 UDP 进行通信
      • UDP服务器
      • UDP客户端
  • 三、使用 `requests` 模块发送 HTTP 请求
      • 3.1 安装 `requests`
      • 3.2 发送 GET 请求
      • 3.3 发送 POST 请求
  • 四、多线程/多进程网络编程
      • 4.1 多线程服务器示例


一、网络编程基础概念

1.1 网络通信协议

网络通信协议是计算机之间通信时遵循的规则。常见的协议有:

  • TCP(Transmission Control Protocol):传输控制协议,面向连接,提供可靠的数据传输。
  • UDP(User Datagram Protocol):用户数据报协议,无连接协议,传输速度快但不可靠。
  • HTTP/HTTPS:超文本传输协议,常用于 Web 数据交互。
  • FTP:文件传输协议,用于文件传输。

1.2 IP地址与端口号

  • IP地址:用于标识设备在网络中的位置,例如:192.168.1.1
  • 端口号:标识应用程序的编号,范围为 0~65535
    • 0~1023:系统保留端口
    • 1024~49151:注册端口
    • 49152~65535:动态端口

二、使用 socket 模块进行网络编程

Python 提供了 socket 模块用于实现底层的网络编程,支持 TCP 和 UDP 协议通信。

2.1 创建 TCP 服务器和客户端

TCP服务器

TCP 服务器需要:

  1. 创建套接字(socket()
  2. 绑定地址和端口(bind()
  3. 监听连接请求(listen()
  4. 接受连接(accept()
  5. 数据收发(recv()send()
  6. 关闭连接(close()

TCP服务器示例:

import socket

# 创建服务器套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))  # 绑定地址和端口
server.listen(5)  # 最大连接数为5
print("服务器已启动,等待连接...")

# 等待客户端连接
while True:
    client, addr = server.accept()
    print(f"连接来自 {addr}")
    
    data = client.recv(1024).decode('utf-8')  # 接收数据
    print("收到数据:", data)
    
    client.send("Hello, Client!".encode('utf-8'))  # 发送数据
    client.close()  # 关闭客户端连接

TCP客户端

客户端示例:

import socket

# 创建客户端套接字
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))  # 连接服务器

# 发送数据
client.send("Hello, Server!".encode('utf-8'))
response = client.recv(1024).decode('utf-8')
print("收到服务器回复:", response)

client.close()

运行步骤

  1. 先运行 TCP 服务器。
  2. 再运行客户端,观察服务器端和客户端之间的数据交互。

2.2 使用 UDP 进行通信

UDP 不需要建立连接,适合实时性要求高的场景,但数据不可靠。

UDP服务器

import socket

# 创建UDP套接字
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 9090))  # 绑定地址和端口
print("UDP服务器已启动...")

while True:
    data, addr = server.recvfrom(1024)  # 接收数据
    print(f"接收来自 {addr} 的数据: {data.decode()}")
    
    server.sendto("数据已收到".encode(), addr)  # 回复客户端

UDP客户端

import socket

# 创建UDP套接字
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送数据
client.sendto("Hello UDP Server!".encode(), ('127.0.0.1', 9090))

# 接收服务器返回的数据
data, addr = client.recvfrom(1024)
print("服务器回复:", data.decode())

client.close()

运行步骤

  1. 启动 UDP 服务器。
  2. 启动 UDP 客户端,观察数据交互情况。

三、使用 requests 模块发送 HTTP 请求

requests 模块是 Python 中进行 HTTP 请求的常用库,支持:

  • GET/POST/PUT/DELETE 等请求方式
  • 自定义请求头和参数
  • 处理 JSON 数据

3.1 安装 requests

pip install requests

3.2 发送 GET 请求

import requests

url = "https://jsonplaceholder.typicode.com/posts/1"
response = requests.get(url)

# 查看响应状态码和内容
print("状态码:", response.status_code)
print("响应数据:", response.json())

3.3 发送 POST 请求

url = "https://jsonplaceholder.typicode.com/posts"
data = {
    "title": "Python网络编程",
    "body": "使用requests发送POST请求",
    "userId": 1
}
response = requests.post(url, json=data)

# 查看响应结果
print("状态码:", response.status_code)
print("返回数据:", response.json())

四、多线程/多进程网络编程

在网络编程中,使用多线程或多进程可以提高并发性能。

4.1 多线程服务器示例

import socket
import threading

def handle_client(client_socket):
    """处理客户端连接"""
    data = client_socket.recv(1024)
    print("收到:", data.decode())
    client_socket.send("你好,客户端!".encode())
    client_socket.close()

# 创建TCP服务器
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))
server.listen(5)
print("多线程服务器启动...")

# 接受多个客户端连接
while True:
    client, addr = server.accept()
    print(f"连接来自 {addr}")
    
    # 启动线程处理客户端请求
    client_thread = threading.Thread(target=handle_client, args=(client,))
    client_thread.start()

优点

  • 多线程提高了并发处理能力。
  • 每个客户端由独立线程处理,互不影响。

相关文章:

  • 六、小白学JAVA-类和对象
  • 【漏洞修复】Android 10 系统源码中的 glibc、curl、openssl、cups、zlib 更新到最新版本
  • ubuntu 22.04 一键安装 lxd
  • 【git拉取冲突解决】Please move or remove them before you merge. Aborting
  • RTMP推流+EasyDSS云服务+边缘AI分析的无人机监控系统设计
  • 【C++游戏引擎开发】《线性代数》(1):环境配置与基础矩阵类设计
  • PHP安装HTML转图片的扩展GD库的使用
  • 江西核威环保科技:打造世界前沿的固液分离设备高新企业
  • 【C++】httplib:轻量级的 HTTP 服务器和客户端
  • 神奇的FlexBox弹性布局
  • R语言——循环
  • vue 自定义 tabs 控件,可自动左右滑动使得选中项居中显示
  • VulnHub-FALL通关攻略
  • CSS3学习教程,从入门到精通,CSS3 弹性盒子(Flexbox)布局全面指南(20)
  • linux ACL权限控制之用户权限控制程序设计
  • HO与OH差异之Navigation三
  • 【leetcode刷题日记】lc.53-最大子数组和
  • 【华三】华三模拟器HCL防火墙、AC和交换机的Web登入
  • 蓝桥杯真题_小蓝和小桥的讨论
  • YOLO历代发展 图像增强方式 架构
  • 大学生网页设计作品/班级优化大师网页版登录
  • 5151ppt网站建设/产品免费推广网站有哪些
  • 创建商务站点的主要工作/色盲眼中的世界
  • 北京 网站建设 京icp/厦门seo管理
  • 怎样创建自己的公众号/优化排名 生客seo
  • 标准件做网站推广效果怎么样/为什么sem的工资都不高