Python3 网络编程学习笔记

1. 简介

网络编程是指使用计算机网络进行通信和数据传输的技术。Python3 提供了丰富的标准库支持网络编程,涵盖了 TCP/IP、UDP、HTTP、FTP、SMTP 等常用网络协议。

2. TCP/IP 编程

2.1 创建 socket 对象

Python3 的 socket 模块提供了 socket 类,可以用于创建套接字对象。下面的代码示例创建了一个 TCP 套接字:

pythonCopy Code
import socket # 创建 TCP 套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

2.2 建立连接

通过调用 connect() 方法可以与远程服务器建立连接。下面的代码示例建立了与本地主机的 80 端口的 HTTP 连接:

pythonCopy Code
import socket # 创建 TCP 套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接 s.connect(('localhost', 80))

2.3 发送数据

通过调用 send() 方法可以向远程服务器发送数据。下面的代码示例向本地主机的 80 端口发送了一条 HTTP 请求:

pythonCopy Code
import 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 Code
import 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 Code
import socket # 创建 UDP 套接字 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

3.2 发送数据

通过调用 sendto() 方法可以向指定地址发送数据。下面的代码示例向本地主机的 5000 端口发送了一条 UDP 数据报:

pythonCopy Code
import 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 Code
import 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 Code
import 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 端口测试聊天室。