2017-04-19 4 views
0

ローカルサーバーをAndroid(192.168.1.4)と同時に起動すると、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

あなたのサーバーはうまくいくと思います。どんなサーバーと同様、無期限に動作します。

ご覧になるには、ブラウザーでhttp://localhost:20000/somethingまたはhttp://127.0.0.1:20000/somethingというURLを指定してください。

「何か」というテキストが表示されます。

Flaskを使用することを検討する必要があります。

+0

はい、http:// server_ip_in_lan:20000 /何かをpcから開くと、正常に動作します。それから私はAndroidデバイスからそれを開きます、それはページokを示します。それから私は再びPCから同じWebサイトを開こうとすると、今は読み込みと読み込みと読み込み...だから私はサーバーを殺す必要がありますし、そのエラーを発生させます。 – peter

0

ない考え、これが正しいアプローチではあるが、タイムアウト設定が助けた場合:

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

https://pymotw.com/2/BaseHTTPServer/#threading-and-forkingは言う:

HTTPServerのSocketServer.TCPServerの簡単なサブクラスであり、複数のスレッドを使用していませんか、要求を処理するプロセススレッドやフォークを追加するには、SocketServerの適切なミックスインを使用して新しいクラスを作成します。

関連する問題