找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3091|回复: 0

[求助] python使用多线程实现web静态服务器出错(tcp socket)

1

主题

6

帖子

6

积分

贫民

积分
6
yuxidi 发表于 2019-7-9 07:49:02 | 显示全部楼层 |阅读模式
1. 源码如下
  1. import socket
  2. import re
  3. import threading

  4. HOST = ""
  5. PORT = 7890
  6. ADDR = (HOST, PORT)


  7. class Wsgiserver(object):

  8.     def __init__(self, addr):
  9.         self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10.         self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  11.         self.server_socket.bind(addr)
  12.         self.server_socket.listen(128)

  13.     def server_forever(self):
  14.         while True:
  15.             tmp_socket, addr = self.server_socket.accept()
  16.             t1 = threading.Thread(target=self.handler_req, args=(tmp_socket, ))
  17.             t1.start()

  18.     # 定义请求处理函数
  19.     def handler_req(self, tmp_socket):

  20.         # 接收请求数据
  21.         recv_data = tmp_socket.recv(1024).decode("utf-8")
  22.         print(">" * 50)
  23.         print(recv_data)

  24.         # 从请求数据内提取请求文件名
  25.         request_lines = recv_data.splitlines()
  26.         ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])

  27.         file_name = ""
  28.         if ret:
  29.             file_name = ret.group(1)
  30.             if file_name == "/":
  31.                 file_name = "/index.html"

  32.         # 根据请求文件名打开文件读取,返回文件内容给客户端
  33.         try:
  34.             f = open("./html" + file_name, "rb")
  35.         except:
  36.             response = "HTTP/1.1 404 NOT FOUND\r\n"
  37.             response += "\r\n"
  38.             response += "------file not found------"
  39.             tmp_socket.send(response.encode("utf-8"))
  40.         else:
  41.             html_content = f.read()
  42.             f.close()
  43.             response = "HTTP/1.1 200 OK\r\n"
  44.             response += "\r\n"
  45.             tmp_socket.send(response.encode("utf-8"))
  46.             tmp_socket.send(html_content)

  47.         tmp_socket.close()


  48. def main():
  49.     myserver = Wsgiserver(ADDR)
  50.     print("server running on port %s" % PORT)
  51.     myserver.server_forever()


  52. if __name__ == '__main__':
  53.     main()
复制代码
源码同级目录下有html目录,里面有网页的各种源码内容,
运行该文件启动服务器后,使用浏览器连接,出现file not found

运行结果

运行结果

报错

报错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表