Python3 网络编程学习笔记
1. 简介
网络编程是指使用计算机网络进行通信和数据传输的技术。Python3 提供了丰富的标准库支持网络编程,涵盖了 TCP/IP、UDP、HTTP、FTP、SMTP 等常用网络协议。
2. TCP/IP 编程
2.1 创建 socket 对象
Python3 的 socket 模块提供了 socket 类,可以用于创建套接字对象。下面的代码示例创建了一个 TCP 套接字:
pythonCopy Codeimport socket
# 创建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2.2 建立连接
通过调用 connect()
方法可以与远程服务器建立连接。下面的代码示例建立了与本地主机的 80 端口的 HTTP 连接:
pythonCopy Codeimport socket
# 创建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('localhost', 80))
2.3 发送数据
通过调用 send()
方法可以向远程服务器发送数据。下面的代码示例向本地主机的 80 端口发送了一条 HTTP 请求:
pythonCopy Codeimport socket
# 创建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('localhost', 80))
# 发送数据
data = 'GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n'
s.send(data.encode())
2.4 接收数据
通过调用 recv()
方法可以从远程服务器接收数据。下面的代码示例接收了从本地主机的 80 端口发送回来的 HTTP 响应:
pythonCopy Codeimport socket
# 创建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('localhost', 80))
# 发送数据
data = 'GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n'
s.send(data.encode())
# 接收数据
response = b''
while True:
chunk = s.recv(1024)
if not chunk:
break
response += chunk
print(response.decode())
3. UDP 编程
3.1 创建 socket 对象
与 TCP 编程类似,UDP 编程也是使用 socket 类创建套接字对象。下面的代码示例创建了一个 UDP 套接字:
pythonCopy Codeimport socket
# 创建 UDP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
3.2 发送数据
通过调用 sendto()
方法可以向指定地址发送数据。下面的代码示例向本地主机的 5000 端口发送了一条 UDP 数据报:
pythonCopy Codeimport socket
# 创建 UDP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
data = b'Hello, World!'
s.sendto(data, ('localhost', 5000))
3.3 接收数据
与发送数据类似,通过调用 recvfrom()
方法可以从指定地址接收数据。下面的代码示例接收了从本地主机的 5000 端口发送过来的一条 UDP 数据报:
pythonCopy Codeimport socket
# 创建 UDP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
data = b'Hello, World!'
s.sendto(data, ('localhost', 5000))
# 接收数据
data, addr = s.recvfrom(1024)
print('Received:', data.decode(), 'from', addr)
4. 实例:基于 TCP 的简单聊天室
下面的代码示例演示了如何使用 Python3 编写一个基于 TCP 的简单聊天室:
pythonCopy Codeimport socket
import threading
# 创建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口号和监听队列大小
HOST = 'localhost'
PORT = 5000
BACKLOG = 5
# 绑定地址和端口号
s.bind((HOST, PORT))
# 开始监听
s.listen(BACKLOG)
# 处理客户端连接的线程函数
def handle_client(conn):
while True:
data = conn.recv(1024)
if not data:
break
print('Received:', data.decode())
conn.sendall(data)
conn.close()
# 等待客户端连接并启动线程处理连接
while True:
conn, addr = s.accept()
print('Connected by', addr)
threading.Thread(target=handle_client, args=(conn,)).start()
此时,你可以使用 Telnet 程序连接到本地主机的 5000 端口测试聊天室。