#coding=utf-8 import socket import re def handle_client(client_socket): "为一个客户端进行服务" recv_data = client_socket.recv(1024).decode('utf-8', errors="ignore") request_header_lines = recv_data.splitlines() for line in request_header_lines: print(line) http_request_line = request_header_lines[0] get_file_name = re.match("[^/]+(/[^ ]*)", http_request_line).group(1) print("file name is ===>%s" % get_file_name) # for test # 如果没有指定访问哪个页面。例如index.html # GET / HTTP/1.1 if get_file_name == "/": get_file_name = DOCUMENTS_ROOT + "/index.html" else: get_file_name = DOCUMENTS_ROOT + get_file_name print("file name is ===2>%s" % get_file_name) #for test try: f = open(get_file_name, "rb") except IOError: # 404表示没有这个页面 response_headers = "HTTP/1.1 404 not found\r\n" response_headers += "\r\n" response_body = "====sorry ,file not found====" else: response_headers = "HTTP/1.1 200 OK\r\n" response_headers += "\r\n" response_body = f.read() f.close() finally: # 因为头信息在组织的时候,是按照字符串组织的,不能与以二进制打开文件读取的数据合并,因此分开发送 # 先发送response的头信息 client_socket.send(response_headers.encode('utf-8')) # 再发送body client_socket.send(response_body) client_socket.close() def main(): "作为程序的主控制入口" server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind(("", 7788)) server_socket.listen(128) while True: client_socket, clien_cAddr = server_socket.accept() handle_client(client_socket) #这里配置服务器 DOCUMENTS_ROOT = "./html" if __name__ == "__main__": main()
服务器端运行效果:
客户端链接效果(页面为python官网,仅作学习讨论使用。):
想了解更多测试、开发的知识、技能,或者职业规划,可以交流😍