【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 服务器需要:
- 创建套接字(
socket()
) - 绑定地址和端口(
bind()
) - 监听连接请求(
listen()
) - 接受连接(
accept()
) - 数据收发(
recv()
和send()
) - 关闭连接(
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()
✅ 运行步骤
- 先运行 TCP 服务器。
- 再运行客户端,观察服务器端和客户端之间的数据交互。
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()
✅ 运行步骤
- 启动 UDP 服务器。
- 启动 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()
✅ 优点
- 多线程提高了并发处理能力。
- 每个客户端由独立线程处理,互不影响。