做的简单的一个静态web服务器,遇到个bug, 提示osError,费了一番功夫找到了bug出处,这点一不小心就错了,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一

Posted py小蟒蛇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了做的简单的一个静态web服务器,遇到个bug, 提示osError,费了一番功夫找到了bug出处,这点一不小心就错了,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一相关的知识,希望对你有一定的参考价值。

 

代码改正之前,先执行了listen,到了bind就报错;此程序只需将listen和改到bind后面即可

from socket import *
from multiprocessing import Process

import re

html_FILE = ‘./html‘

class Server(object):
     def __init__(self):
          self.server_socket = socket(AF_INET,SOCK_STREAM)
          self.server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
          self.server_socket.listen(128)

     def bind_addr(self,port):
          self.server_socket.bind((‘‘,port))

     def start(self):

改:将listen放在这里

     self.server-socket.listen(128)
          while True:
              client_socket,client_addr = self.server_socket.accept()
              client_p = Process(target=self.clientDeal,args=(client_socket,))
              client_p.start()
              client_socket.close()

     def clientDeal(self,client_socket):
         recv_data = client_socket.recv(2048)
         requestHeaderLines = recv_data.decode(‘utf-8‘).splitlines()
         for line in requestHeaderLines:
        print(line)

        request_start_line = requestHeaderLines[0]
        print(request_start_line)
        file_name = re.match(r‘\w+ +(/[^ ]*)‘,request_start_line).group(1)
        print(file_name)

       if file_name == ‘/‘:
           file_name = HTML_FILE + ‘/index.html‘
       else:
           file_name = HTML_FILE + file_name

       try:
           txt = open(file_name,‘rb‘)
       except IOError:
           responseHeaderlines = ‘HTTP/1.1 404 NOT Found\r\n‘
           response2 = ‘server:my server\r\n‘ + ‘\r\n‘
           responseBody = ‘The file is not found!‘
      else:
          file_data = txt.read()
          responseHeaderlines = ‘HTTP/1.1 200 ok\r\n‘
          response2 = ‘server:my server\r\n‘ + ‘\r\n‘
          responseBody = file_data.decode(‘utf-8‘)
          txt.close()

     response = responseHeaderlines + response2 + responseBody
     #client_socket.send(bytes(response,‘utf-8‘))
     client_socket.send(response.encode(‘utf-8‘))
     client_socket.close()

def main():
    server = Server()
    server.bind_addr(999)
    server.start()


if __name__ == ‘__main__‘:
    main()

以上是关于做的简单的一个静态web服务器,遇到个bug, 提示osError,费了一番功夫找到了bug出处,这点一不小心就错了,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一的主要内容,如果未能解决你的问题,请参考以下文章

测试时遇到的印象深刻的bug是啥?

聪明的提BUG

当我们碰到MySQL的bug,怎么给官方提?

6.7亿美元!F5喜提开源服务器Nginx;携程回应“大数据杀熟”系系统Bug;CSS宣布支持三角函数;Atom 1.35.0

常用Web服务器了解

遇到问题或bug时要做的事。