Python Socket 编程入门
***本文由AI辅助生成***
Python Socket 编程入门
Socket 编程是一种进程间通信的方式,允许跨网络的不同计算机之间进行数据交换。在Python中,socket库提供了低级别的网络接口,可用于TCP/IP或UDP协议的应用开发。
创建基本的TCP服务器端
以下是一个简单的Python TCP服务器示例:
import socket
HOST = 'localhost'
PORT = 65432 # Non-privileged ports are > 1023
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f'Connected by {addr}')
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
创建客户端
与上面的服务器配合使用的客户端:
import socket
HOST = 'localhost' # The server's hostname or IP address
PORT = 65432 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
UDP (User Datagram Protocol)
UDP 是一种无连接的服务,通常用于实时传输,如视频流和游戏。
UDP服务器:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 10000)
sock.bind(server_address)
while True:
data, address = sock.recvfrom(4096)
print(f'Received {len(data)} bytes from {address}')
if data:
sent = sock.sendto(data, address)
UDP客户端:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 10000)
message = b'this is the message'
sent = sock.sendto(message, server_address)
data, server = sock.recvfrom(4096)
使用 select
和 poll
进行多路复用
Python 的 select
和 poll
函数可用于监听多个socket,实现实时响应。
import select
import socket
inputs = [client_socket, server_socket] # 假设 client_socket 已经建立连接
outputs = []
while inputs:
readable, writable, exceptional = select.select(inputs, outputs, inputs)
for s in readable:
if s is server_socket:
connection, client_address = s.accept()
inputs.append(connection)
else:
data = s.recv(1024)
if data:
outputs.append(s)
else:
inputs.remove(s)
for s in writable:
s.sendall(data)
outputs.remove(s)
for s in exceptional:
inputs.remove(s)
if s in outputs:
outputs.remove(s)
进一步学习
- 考虑错误处理,如连接中断、缓冲区溢出等。
- 学习更高级的并发模型,比如异步I/O和协程。
- 探索安全性,如SSL/TLS加密。
- 实践网络协议细节,了解HTTP、FTP等高级协议的工作原理。
Socket编程是网络应用的基础,掌握了它之后,你可以构建各种网络服务,从小型实验项目到大型分布式系统都可以涉及。