本文共 2805 字,大约阅读时间需要 9 分钟。
from socket import *import sys# 创建TCP套接字,使用IPv4协议,类型为TCPserverSocket = socket(AF_INET, SOCK_STREAM)# 指派服务器地址和端口serverPort = 6789serverSocket.bind(("", serverPort))# 设置监听,最大连接数为1serverSocket.listen(1)while True: print('The server is ready to receive') # 等待客户端连接,返回新的连接套接字和地址 connectionSocket, addr = serverSocket.accept() try: # 接收客户端的HTTP请求,最大接收1024字节 message = connectionSocket.recv(1024).decode() # 提取URL中的路径,假设格式为“/filename.html” filename = message.split()[1] # 打开对应的文件 # [1:]用于去掉前导斜杠,避免错误 try: f = open(filename[1:]) # 读取文件内容 outputdata = f.read() # 发送HTTP响应头 connectionSocket.send("HTTP/1.1 200 OK\r\n\r\n".encode()) # 发送文件内容 for i in range(0, len(outputdata)): connectionSocket.send(outputdata[i].encode()) # 发送结束标记 connectionSocket.send("\r\n".encode()) except IOError: # 文件不存在,返回404 Not Found connectionSocket.send("HTTP/1.1 404 Not Found\r\n\r\n".encode()) connectionSocket.send("404 Not Found
\r\n".encode()) except Exception as e: # 处理其他错误,例如连接中断 print(f"Error: {e}") finally: # 关闭客户端连接 connectionSocket.close() # 关闭服务器套接字 serverSocket.close() # 退出程序 sys.exit() from socket import *import sys# 创建TCP套接字,使用IPv4协议,类型为TCPserverSocket = socket(AF_INET, SOCK_STREAM)# 指派服务器地址和端口serverPort = 6789serverSocket.bind(("", serverPort))# 设置监听,最大连接数为1serverSocket.listen(1)while True: print('The server is ready to receive') # 等待客户端连接,返回新的连接套接字和地址 connectionSocket, addr = serverSocket.accept() try: # 接收客户端的HTTP请求 message = connectionSocket.recv(1024).decode() # 提取文件名 filename = message.split()[1][1:] # 打开文件 try: f = open(filename, 'r') # 读取文件内容 outputdata = f.read() # 发送HTTP响应头 connectionSocket.send("HTTP/1.1 200 OK\r\n\r\n".encode()) # 发送文件内容 connectionSocket.send(outputdata.encode()) # 发送结束标记 connectionSocket.send("\r\n".encode()) except IOError: # 文件不存在,返回404 connectionSocket.send("HTTP/1.1 404 Not Found\r\n\r\n".encode()) connectionSocket.send("404 Not Found
\r\n".encode()) except Exception as e: print(f"Error: {e}") finally: connectionSocket.close() serverSocket.close() sys.exit() 服务器端:
WebServer.py 和 HelloWorld.html 放在同一目录下。python WebServer.py。客户端:
http://localhost:6789/HelloWorld.html。测试404错误:
http://localhost:6789/abc.html。确保服务器和客户端在同一局域网内,或者修改服务器IP地址以供外部访问。
转载地址:http://jzhwz.baihongyu.com/