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)
python写简单的web静态服务器,对socket的深入理解。
最新推荐文章于 2022-01-24 14:44:12 发布