使用Python,做一个静态的http服务器,直接返回一个字符串。
1.创建进程
2.在子进程中处理请求
3.获得请求,构造相应报文,响应起始行,响应头,响应体,传给客户端。
import socket from multiprocessing import Process PORT = 10002 def handle_client(client_sock, client_addr): """ 子进程处理客户端 :param client_sock: socket类型对象 处理客户端通信用到的socket对象 :param client_addr: 元祖 (ip, port) 客户端的地址信息 :return: None """ # 接收客户端发送过来的请求数据, 即http请求报文数据 http_req_data = client_sock.recv(1024) print("客户端 %s 发送的HTTP请求报文:\n %s" % (client_addr, http_req_data.decode())) # 构造响应报文 resp_start_line = "HTTP/1.0 200 OK\r\n" # 响应起始行 resp_headers = "Server: MyServer\r\n" # 响应头 resp_headers += "Content-Type: text\r\n" resp_body = "hello python" # 响应体 http_resp_data = resp_start_line + resp_headers + "\r\n" + resp_body print("传回给客户端的响应HTTP报文:\n %s" % http_resp_data) # 传回给客户端响应数据 client_sock.send(http_resp_data.encode()) # 关闭socket client_sock.close() def main(): listen_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) address = ("", PORT) listen_sock.bind(address) listen_sock.listen(128) while True: client_sock, client_addr = listen_sock.accept() print("客户端%s已连接" % (client_addr,)) p = Process(target=handle_client, args=(client_sock, client_addr)) p.start() # 释放client_sock client_sock.close() if __name__ == '__main__': main()
运行结果: