import socket
import re
import multiprocessing
def service_client(n_s):
"""为这个客户端返回数据"""
# 1. 接受浏览器发送过来的请求,即http请求
# GET / HTTP/1.1
# ...
request = n_s.recv(1024).decode("utf-8")
# print('>>>' * 50)
# print(request)
request_lines = request.splitlines()
print('')
print('>'*50)
print(request_lines)
# GET /index.html HTTP/1.1
file_name = ''
ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
if ret:
file_name = ret.group(1)
# print('-'*50, file_name)
if file_name == '/':
file_name = '/index.html'
# 2. 返回http格式的数据
try:
f = open("./html" + file_name, "rb")
except:
response = "HTTP/1.1 404 NOT FOUND\r\n"
response += "\r\n"
response += '<h1>---file not found---</h1>'
n_s.send(response.encode('utf-8'))
else:
html_content = f.read()
f.close()
# 2.1 准备发送给浏览器的数据---header
response = "HTTP/1.1 200 OK\r\n"
response += "\r\n"
# 2.2 ---body
# response += "<h1>hahaha</h1>"
# 将response header发送给浏览器
n_s.send(response.encode("utf-8"))
# 将response body发送给浏览器
n_s.send(html_content)
# 关闭套接字
n_s.close()
def main():
# 1.创建套接字
tcp_serv_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_serv_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 2. 绑定
tcp_serv_socket.bind(('192.168.1.56', 6648))
# 3. 监听
tcp_serv_socket.listen(128)
while True:
# 4. 等待连接
new_socket, client_addr = tcp_serv_socket.accept()
# 5. 为客户端服务
# p = multiprocessing.Process(target=service_client, args=(new_socket,))
# p.start()
# new_socket.close()
service_client(new_socket)
# 6. 关闭套接字
tcp_serv_socket.close()
if __name__ == '__main__':
main()
在不添加进程时用上述代码打开网页,程序不报错;
当在第69行添加进程后,把service_client(new_socket)注释掉,运行,打开网页出现错误:
File "C:\Users\lenovo\Desktop\asd_8\http_server.py", line 23, in service_client
ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
IndexError: list index out of range
但此时服务器依然可以运行,网页依然可以阅读。
有大佬解释一下这是什么情况吗?
浏览器为火狐,新版Microsoft Edge,相同操作下都可运行,火狐报错,edge正常