from multiprocessing import Process
import re
import socket
HTML_ROOT_DIR='./test' # 设置 需要网页打开的网页 存放的 根目录
class HTTPserver(object):
def init(self): #初始化 方法
self.server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket 对象
def start(self):
self.server_socket.listen(128) #表示设置最多的连接数
print('服务器等待客户端连接a')
while True:
client_socket,client_address=self.server_socket.accept()
print("[%s, %s] 客户链接上了" %client_address)
handle_client_process=Process(target=self.handle_client,args=(client_socket,))
handle_client_process.start() #开始一个进程
client_socket.close() #关闭客户端的socket
def handle_client(self,client_socket): # 处理客户端请求 ,接受客户端的数据
request_date=client_socket.recv(1024) #获取客户端请求数据
print('从客户端接受的数据为:' ,request_date)
request_lines =request_date.splitlines() # 将接受到的数据按照行划分
for line in request_lines:
print(line) #拆分后 打印出每行拆分的内容
request_start_line=request_lines[0] #解析请求的报文
print('*'*10) #区分开 请求的第一行报文
print(request_start_line.decode ('utf-8')) #把收到的第一行报文 解码成我们能看懂的字符串
file_name=re.match(r"\w+ +(/[^]*)",request_start_line.decode ('utf-8')).group(1) #使用正则表达式提取请求的报文 并分组
if '/'==file_name:
file_name='./index.html' #如果提取到的文件名是根目录,把文件名赋值给filename
try:
file=open (HTML_ROOT_DIR +file_name, 'rb')
except IOError:
response_start_line='HTTP/1.1 404 not found \r\n'
response_headers='server: My server \r\n'
response_body='The file is not found'
else:
file_date=file.read()
file.close()
response_start_line='HTTP/1.1 200 OK \r\n'
response_headers='server : My server \r\n'
response_body=file_date.decode('utf-8')
response=response_start_line+response_headers+'\r\n'+ response_body #拼接返回的数据
print('返回的完整数据 是:',response)
client_socket.send(bytes(response,'utf-8'))
client_socket.close()
def bind(self,port):
self.server_socket.bind(("",port))
def main(): # 主函数
http_server=HTTPserver() #实例化 http类
http_server.bind(9000) #绑定端口号
http_server.start() #调用start
if name=='main':
main()
[^这里少了个空格],不过有现成的flask web框架你干嘛不用呢?有帮助麻烦点个采纳【本回答右上角】,谢谢~~
file_name=re.match(r"\w+ +(/[^ ]*)",request_start_line.decode('utf-8')).group(1)#[^这里少了个空格]