2017-11-19 10 views
0

소켓과 스레딩 (멀티 스레딩 용)을 사용하여 웹 서버를 만들려고했습니다. 이 서버를 127.0.0.1:8888에 연결하려고했지만 실패했습니다.
저는 파이썬의 초보자이므로 오류를 잡기가 어렵습니다. 이 오류를 수정하도록 도와주세요. 다음은 코드입니다.브라우저 (파이썬)에 웹 서버 연결

(+ 내가 파이썬 2.7를 사용하고, 내가 가진 오류가 127.0.0.1 브라우저에서 연결을 거부했다, 파이썬에 오류 메시지가 없었다.) 나는 완전히 왜 이해가 안

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

오류가 발생하면 운영체제에 기록하고 파이썬 2.x 또는 3.x일까요? 또한 여기에 오타가 있습니다 :'self.headers [ 'Conetnt-Length']' – cmertayak

+0

포트 8888에서 수신 대기하는 응용 프로그램이 있습니까? 어떤 OS를 사용하고 있는지 잘 모르겠지만 리눅스에서는'netstat -tulpan | grep 8888'. – mattias

+0

@cmertayak 오타를 알려 주셔서 감사합니다 :) 나는 당신의 질문에 대답하여 이것을 편집했습니다. – stella

답변

0

같은 포트에서 수신하는 100 개의 스레드를 회전 시키려고하지만 실수라고 제안 할 것입니다. Python에서 매우 간단한 HTTP 서버를 만드는 방법에 대해 (일부 스레딩 예제 포함)이 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"