用pycharm写了web服务器的代码,然后用浏览器连接不上(一直转圈圈)
浏览器连接不上的截图如下:
pucharm错误信息如下(手动停止的):
/usr/bin/python3.8 /home/yah/PycharmProjects/pythonProject/018_web_server_返回指定页面错误.py
Traceback (most recent call last):
File "/home/yah/PycharmProjects/pythonProject/018_web_server_返回指定页面错误.py", line 67, in
main()
File "/home/yah/PycharmProjects/pythonProject/018_web_server_返回指定页面错误.py", line 60, in main
new_client_socket, ip_port = tcp_server_socket.accept()
File "/usr/lib/python3.8/socket.py", line 292, in accept
fd, addr = self._accept()
KeyboardInterrupt
进程已结束,退出代码130 (interrupted by signal 2: SIGINT)
代码如下:
import socket
def request_handler(new_client_socket, ip_port):
"""接收信息,作出响应"""
# 7.接收客户端浏览器发送的请求协议
request_data = new_client_socket.recv(1024).decode()
# 8.判断协议是否为空
if not request_data:
print(f'客户端{ip_port[0]}连接已断开!')
new_client_socket.close()
return
# 使用空格切割请求行,请求头,请求空格,请求主体
request_line_list = request_data.split(' ')
# 切割出来的列表第2位就是请求的文件路径名
file_path = request_line_list[1]
if file_path == '/':
file_path = '/index.html'
# 9.拼接响应报文
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:PythonWS/2.1\r\n'
response_bank = '\r\n'
# response_body = 'Hello World!'
try:
# 读取文件
with open('static' + file_path, 'rb') as file:
response_body = file.read()
# 将读取到的内容返回给客户端
response_data = (response_line + response_header + response_bank).encode() + response_body
# 10.发送相应报文
new_client_socket.send(response_data)
# 11.关闭当前客户端连接
new_client_socket.close()
except Exception as e:
# 修改响应行为404
response_line = 'HTTP/1.1 404 NotFound\r\n'
# 响应的内容为错误
response_body = f'Error!{str(e)}'
# 把内容转换为字节码
response_body = response_body.encode()
def main():
# 1.导入模块
# 2.创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3.设置地址重用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 4.绑定IP和端口
tcp_server_socket.bind(('127.0.0.1', 8080))
# 5.设置监听,套接字由主动变为被动
tcp_server_socket.listen(128)
# 6.接受客户端连接
while True:
new_client_socket, ip_port = tcp_server_socket.accept()
request_handler(new_client_socket, ip_port) # 调用函数处理请求
# 11.关闭连接
# tcp_server_socket.close()
if __name__ == '__main__':
main()