2017-04-19 19 views
0

當我在Android(192.168.1.4)和pc上同時打開本地服務器時,pc從不顯示頁面(正在加載並加載和加載...) - 此錯誤提出當我殺了我的服務器:basehttpserver不響應其他請求

Exception happened during processing of request from ('192.168.1.4', 54734) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/usr/lib/python2.7/SocketServer.py", line 655, in __init__ 
    self.handle() 
    File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle 
    self.handle_one_request() 
    File "/usr/lib/python2.7/BaseHTTPServer.py", line 310, in handle_one_request 
    self.raw_requestline = self.rfile.readline(65537) 
    File "/usr/lib/python2.7/socket.py", line 476, in readline 
    data = self._sock.recv(self._rbufsize) 
KeyboardInterrupt 

我的服務器腳本:

# !/usr/bin/env python 
# -*- coding: utf-8 -*- 
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 

PORT = 20000 


class S(BaseHTTPRequestHandler): 
    def log_message(self, format, *args): 
     return 

    def _set_headers(self): 
     self.send_response(200) 
     self.send_header('Content-type', 'text/html') 
     self.send_header('Access-Control-Allow-Origin', '*') 
     self.end_headers() 

    def do_GET(self): 
     self._set_headers() 
     if self.path == "/other": 
      self.wfile.write("other") 

     if self.path == "/something": 
      self.wfile.write('something') 

    def do_HEAD(self): 
     self._set_headers() 

    def do_POST(self): 
     self._set_headers() 
     self.wfile.write("hello post") 


def run(server_class=HTTPServer, handler_class=S, port=PORT): 
    server_address = ('', port) 
    httpd = server_class(server_address, handler_class) 
    httpd.serve_forever() 


if __name__ == "__main__": 
    from sys import argv 

    if len(argv) == 2: 
     run(port=int(argv[1])) 
    else: 
     run() 

什麼是錯我的代碼嗎?

+0

您是否在Windows防火牆中打開了端口20000?你爲什麼不嘗試像80或8080這樣更經典的端口號? –

+0

是的,這個腳本在Linux機器上運行,所有端口都打開。 – peter

回答

0

我認爲你的服務器運行良好:像任何服務器一樣,它運行無限期。

要正常工作,只需將瀏覽器指向以下URL:http://localhost:20000/somethinghttp://127.0.0.1:20000/something

你應該得到文字「東西」。您可以考慮使用Flask

+0

是的,當我從PC打開http:// server_ip_in_lan:20000 /東西時,它工作正常。然後我從Android設備打開它,它顯示頁面確定。然後我嘗試再次從PC打開相同的網站,現在它只是加載和加載和加載...所以我必須殺死服務器,然後引發這個錯誤。 – peter

0

不知道,如果這是正確的做法,但設置超時的幫助:

... 
     def log_message(self, format, *args): 
      return 
     def setup(self): 
      BaseHTTPRequestHandler.setup(self) 
      self.request.settimeout(0.5) 
...