Python 中的 Socket 编程主要用于处理网络通信,通过 Python 标准库 socket
模块,开发者可以方便地创建客户端和服务器应用程序,以实现跨计算机之间的数据交换。以下是一些基础概念和关键步骤:
基础概念:
套接字 (Socket): 是一个网络通信的端点,用于不同主机间进程间的通信。
地址家族 (Address Family):
AF_INET
:用于 Internet 协议(IPv4)网络通信。AF_INET6
:用于 IPv6 网络通信。AF_UNIX
或AF_LOCAL
:用于同一台机器上的进程间通信。
套接字类型:
SOCK_STREAM
(流式套接字):提供TCP(传输控制协议)服务,保证数据包有序且无差错地到达。SOCK_DGRAM
(数据报套接字):提供UDP(用户数据报协议)服务,不保证顺序和可靠性,但速度较快。
基本流程:
创建套接字:使用
socket.socket()
函数创建一个套接字对象。import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
绑定套接字:服务器端使用
bind()
函数将其套接字与本地地址(IP和端口号)关联起来。sock.bind(('localhost', 12345)) # 绑定本地IP和端口
监听连接:服务器端调用
listen()
函数开始监听连接请求。sock.listen(5) # 设置最大并发连接数
接受连接:服务器端使用
accept()
函数等待并接受客户端的连接请求,返回新的套接字和客户端地址。conn, addr = sock.accept()
发送和接收数据:客户端和服务端都可以使用
send()
和recv()
方法发送和接收数据。conn.sendall(b'some data') # 发送数据 data = conn.recv(1024) # 接收数据
关闭套接字:通信结束后,使用
close()
方法关闭套接字。conn.close()
SocketServer 模块:
此外,Python 还提供了 SocketServer
模块(现在推荐使用其子模块 socketserver
),它包含了几个抽象基类,如 TCPServer
和 UDPServer
,这些类简化了服务器端的实现,开发者只需要重写必要的回调方法即可。
示例:
一个简单的 TCP 服务器端代码片段可能如下:
import socket
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定 IP 地址和端口
server_socket.bind(('localhost', 12345))
# 开始监听连接
server_socket.listen(5)
while True:
# 接受客户端连接
client_socket, client_address = server_socket.accept()
try:
# 接收客户端发送的数据
message = client_socket.recv(1024).decode('utf-8')
print(f"Received message from {client_address}: {message}")
# 发送响应数据
response = "ACK! Received your message."
client_socket.sendall(response.encode('utf-8'))
finally:
# 关闭客户端连接
client_socket.close()
对应的客户端示例:
import socket
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
client_socket.connect(('localhost', 12345))
# 发送数据
message = "Hello, Server!"
client_socket.sendall(message.encode('utf-8'))
# 接收服务器响应
response = client_socket.recv(1024).decode('utf-8')
print(f"Received response from server: {response}")
# 关闭客户端连接
client_socket.close()
以上就是 Python 中 Socket 编程的基本介绍及其应用。实际项目中,还需要注意错误处理、数据编码解码、以及可能的安全性问题等。