2017-11-19 21 views
0

ソケットとスレッド(マルチスレッド用)を使用してWebサーバーを作成しようとしました。このサーバーを127.0.0.1:8888に接続しようとしましたが、失敗しました。
私はPythonの初心者なので、エラーをキャッチするのは難しいです。これらのエラーを修正するのを手伝ってください。 ここにコードがあります。Webサーバーとブラウザ(Python)の接続

(+ Iのpython 2.7を使用しています、私は127.0.0.1は、ブラウザからの接続を拒否されたしまったエラーは、エラー・メッセージは、Pythonにありませんでした。)

import BaseHTTPServer 
import socket 
import threading 
import time 
#making method 

class Handler(BaseHTTPServer.BaseHTTPRequestHandler): 
    def _set_headers(self): 
     #error handling 
     if self.protocol_version != 'HTTP/1.1': 
      self.send_error(400) 
      return 
     elif self.path !='/': 
      self.send_error(404) 
      return 
     else: 
      self.send_respose(200) 
      self.send_header('Content-type', 'text/html') 
      self.send_header('Content-length', 1024) 
      self.end_headers() 
    def do_GET(self): 
     self._set_headers() 
     self.wfile.write('Hello World') 
     return 
    def do_PUT(self): 
     content_length=int(self.headers['Content-Length']) 
     put_data=self.rfile.read(content_length) 
     self._set_headers() 
     self.wfile.write('Hello World') 
     return 

#making one socket 
sock=socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
sock.bind(('',8888)) 
sock.listen(5) 

#multi threading 
class Thread(threading.Thread): 
    def __init__(self, i): 
     threading.Thread.__init__(self) 
     self.i=i 
     self.start() 
    def run(self): 
     server = BaseHTTPServer.HTTPServer(('',8888), Handler) 
     server.socket=sock 
     server.server_bind=self.server_close= lambda self: None 
     server.serve_forever() 

if __name__=='__main__': 

    print('Started WebServer on port 8888') 
    [Thread(i) for i in range(100)] 
    time.sleep(100) 
+1

お使いのオペレーティングシステムが表示されているエラーを書き留めて、それがPython 2.xまたは3.xの場合は書き留めてください。 'self.headers ['Conetnt-Length']' – cmertayak

+0

ポート8888でリッスンしているアプリケーションはありますか?どのOSを使用しているのか分かりませんが、Linuxでは 'netstat -tulpan |グレープ8888'。 – mattias

+0

@cmertayak私に誤字を知らせていただきありがとうございます:)私はあなたの質問に答えてこれを編集しました。 – stella

答えて

0

である理由を私は完全には理解していませんあなたは同じポートで聞いて100スレッドをスピンしようとしていますが、間違いであることを示唆しています。非常に簡単なHTTPサーバーをPythonで作成する方法については、このblog postを参照してください(いくつかのスレッドの例を含む)。あなたは別のスレッドで各リクエストを処理する簡単なスレッドサーバーを見つけることができます。私はそれが助けてくれることを願う


    from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler 
    from SocketServer import ThreadingMixIn 
    import threading 

    class Handler(BaseHTTPRequestHandler): 
     """This is a handler that will answer the requests""" 
     def do_GET(self): 
      self.send_response(200) 
      self.end_headers() 
      message = "Hello stella this is thread: "+threading.currentThread().getName() 
      self.wfile.write(message) 
      return 

    class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): 
     """This is the server that will use your handler.""" 

    if __name__ == '__main__': 
     server = ThreadedHTTPServer(('', 8888), Handler) 
     print "Press Ctrl-C to stop" 
     try: 
      server.serve_forever() 
      print "Server is up" 
     except KeyboardInterrupt: 
      server.shutdown() 
      print "Server is down" 
関連する問題