Python中网络编程主要依赖于socket
库。我们可以通过socket
库实现客户端和服务器的网络编程。
1. 客户端编程:
- 使用
socket()
创建套接字,并连接服务器。 - 连接后可以通过套接字发送和接收数据。
- 使用
close()
关闭连接。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 8000))
sock.send(b"Hello")
data = sock.recv(1024)
print(data.decode())
sock.close()
2. 服务器编程:
- 使用
socket()
创建套接字,并绑定IP和端口。 - 使用
listen()
监听连接,accept()接受连接。 - 接受连接后可以接收和发送数据,最后关闭连接。
- 服务器可以循环监听多个客户端连接。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("127.0.0.1", 8000))
sock.listen(5)
while True:
conn, addr = sock.accept()
data = conn.recv(1024)
conn.send(b"Hello")
conn.close()
3. 使用select
实现I/O多路复用:
- select可以同时监听多个连接,一旦某个连接有新的数据可以读取,则立即被处理。
- 这样可以很高效地管理大量连接,是网络编程的重要方法。
import select
inputs = [conn1, conn2, ...]
outputs = []
timeout = None
while inputs:
readable, writable, exceptional = select.select(inputs, outputs, inputs, timeout)
for s in readable:
if s is sock:
conn, addr = s.accept()
inputs.append(conn)
else:
data = s.recv(1024)
s.send(b"OK")
所以,利用socket
库可以实现网络数据的发送和接收,编写出客户端/服务器程序,这是Python网络编程的基础。熟练掌握socket
的各类方法,并理解I/O多路复用概念,可以编写高性能网络应用程序。