python写简单的web静态服务器,对socket的深入理解。

xiaoxiao2021-02-28  85

import socket from multiprocessing import Process import time #...使用socket创建简单的静态服务器 def func1(sock): # 子进程实现的功能 read_data = sock.recv(2014) # 接受套接字传入的数据 if len(read_data) == 0: # 判断客户端关闭/html协议内容未接收到的情况下。 print('client close....') print(sock) sock.close() else: # 能够获取read_data split_data = read_data.decode().splitlines() print(split_data[0]) # 获取用户请求文件 response_state_line = 'HTTP/1.1 200 OK\r\n' response_headers = 'Content-Type: text/plain\r\n' response_body = "hello worldjjjjj" print("======test1=======") # web服务器根据客户请求返回内容显示在web上 response_data = response_state_line+response_headers+"\r\n"+response_body sock.send(response_data.encode()) print("============test3===========") sock.close() def main(): #主进程--设置监听端及绑定ip listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_addr = ('192.168.199.214', 10000) listen_socket.bind(server_addr) listen_socket.listen(128) while True: #主进程不断尝试接受浏览器请求连接 new_socket, peer_addr = listen_socket.accept() print("asss") p = Process(target=func1, args=(new_socket,)) p.start() print("父进程", new_socket) time.sleep(10) new_socket.close() if __name__ == '__main__': main() ![运行情况:显然如看到的不同的在accept不断尝试连接情况下,socket的fd是可能不变的,在windows条件下,可能会被其他进程暂用fd,但是假设是相同的fd,浏览器进程还在不断的调用不同的端口进行连接,一直到主进程的socket关闭(因为主进程的new_socket和子进程的new_socket,不是同一个socket(fd不同),但是他们绑定了相同的ip,浏览器ip和端口](http://img.blog.csdn.net/20170608001713764?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ2hlbl9jaG9uZ19f/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这是对端口号的描述,很明显端口号是不同的。但是为什么会在子进程的new_socket没有读取数据情况下进行else操作,即打印出---test1----,----test2----,个人猜想可能是在子进程的socket没法读取数据的情况下,擅自调用了父进程的socket,这跟不同进程间的变量是独立的又相矛盾](http://img.blog.csdn.net/20170608002241298?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ2hlbl9jaG9uZ19f/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) # ---------------------跪求正确见解------------------------ # -------------求饭吃 0.0~~~ ![这里写图片描述](http://img.blog.csdn.net/20170608003338272?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ2hlbl9jaG9uZ19f/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](http://img.blog.csdn.net/20170608003356741?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ2hlbl9jaG9uZ19f/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
转载请注明原文地址: https://www.6miu.com/read-67218.html

最新回复(0)