代码:
1 import socket 2 import re 3 4 5 def client_msg(new_client): 6 # 接收客户端请求 7 recv_data = new_client.recv(1024).decode("utf-8") 8 # 把读出的数据分行 9 recv_data_lines = recv_data.splitlines() 10 # 正则匹配GET后面的请求的页面 11 # [^/]表示非“/”字符 +表示至少1个或多个,[^ ]只要不是空格,*表示0个或多个 12 ret = re.match(r"[^/]+(/[^ ]*)",recv_data_lines[0]) 13 14 # ret = re.search(r"/[^ ]*",recv_data_lines[0]) # 查找第一次“/”后面非空格的字符串 15 file_name = ret.group(1) 16 print(file_name) 17 # 打开文件 18 try: 19 f = open("./html" + file_name,"rb") 20 except: 21 # 创建返回数据 HEADER 22 response = "HTTP/1.1 404 NOT FOUND\r\n" 23 response += "\r\n" 24 response += "-----NOT FOUND----" 25 # 发送数据到客户端 26 new_client.send(response.encode("utf-8")) 27 else: 28 # 读出数据 29 html_content = f.read() 30 31 # 创建返回数据 HEADER 32 response = "HTTP/1.1 200 ok\r\n" 33 response += "\r\n" 34 35 # 发送数据到客户端 36 new_client.send(response.encode("utf-8")) 37 new_client.send(html_content) 38 39 # 关闭套接字 40 new_client.close() 41 42 43 def main(): 44 # 创建套接字 45 tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 46 # 绑定端口 47 tcp_server_socket.bind(("",7890)) 48 # 设置监听状态 49 tcp_server_socket.listen(128) 50 # 新建为客户端服务的套接字 51 while True: 52 new_client,client_addr = tcp_server_socket.accept() 53 # 调用服务方法 54 client_msg(new_client) 55 # 关闭套接字 56 tcp_server_socket.close()