2012-09-02 2 views
2

저는 SocketServer.TCPServer 및 SocketServer.BaseRequestHandler 기본 클래스를 사용하여 Python 서버를 개발해 왔습니다. 호스트 "localhost"와 포트 2304 (다른 프로그램에서는 사용하지 않음)를 사용하고 있습니다.Python SocketServer.BaseRequestHandler가 원격 요청과 통신하지 않습니다.

문제는 내 서버가 원격 요청에 응답하지 않는다는 것입니다. 저는 Amazon AWS를 사용 중이며 액세스를위한 고정 IP 주소를 가지고 있습니다.

예를 들어 Amazon 로컬 시스템에서 서버를 테스트 할 때. 브라우저, 내 서버에 문제가 없지만 원격 액세스는 차단 된 상태로 유지됩니다. 2304 포트를 열어 외부 로컬 시스템에서 액세스 할 수있는 단서가 없습니다.

import threading, socket 
import SocketServer, Queue 
import globals 
import transaction_pool 


class CTSRSThreadedTCPRequestHandler(SocketServer.BaseRequestHandler): 

    def handle(self): 

     if globals.terminating: 
      self.Respond("") 


     pCurrThread = threading.currentThread() 
     sData = self.request.recv(8192) 

     print "CTSRSThreadedTCPRequestHandler->RECV->OK!" 

     sResponse = "OK!" 

     self.Respond(sResponse) 

     print "CTSRSThreadedTCPRequestHandler->SEND->OK!" 

    #------------------------------------------------------------------------- 

    def Respond(self, sResponse): 
     self.request.send(sResponse) 

    #------------------------------------------------------------------------- 


class CTSRSThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): 
    allow_reuse_address = True 


class CTSRSServer: 

    m_pServerThread = None 
    m_pServer = None 

    #---------------------------------------------------------- 

    def StartServer(self): 
     try: 
      self.m_pServer = CTSRSThreadedTCPServer(("localhost", 2304), CTSRSThreadedTCPRequestHandler) 
      sIP, iPort = self.m_pServer.server_address 

      self.m_pServerThread = threading.Thread(target = self.m_pServer.serve_forever) 

      self.m_pServerThread.daemon = True 
      self.m_pServer.daemon_threads = True 
      self.m_pServerThread.start() 

      globals.system_log.info("[CTSRS]->StartServer()") 

     except Exception, e: 
      globals.system_log.info("[CTSRS]->StartServer() -> Exception: " + str(e)) 
      return False 

     return True 


    #---------------------------------------------------------- 

    def StopServer(self): 
     globals.system_log.info("[CTSRS]->StopServer()") 

    #---------------------------------------------------------- 

답변

3

물론 원격 요청에는 응답하지 않습니다. "localhost"는 정확히 말하면 "로컬 호스트"입니다. 대신 외부 인터페이스에 바인딩하거나 일반 "catch-all"인터페이스에 바인딩해야합니다.

모든 인터페이스에 바인딩하려면 예 :

self.m_pServer = CTSRSThreadedTCPServer(('', 2304), CTSRSThreadedTCPRequestHandler) 

빈 문자열을 주소로 사용하면 서버가 모든 인터페이스에서 수신 대기하게됩니다.

+0

어떻게합니까? 일반 "캐치 올"인터페이스에 바인드 하시겠습니까? – StjepanV

+0

Pileborg 씨 감사합니다! 훌륭하게 작동합니다! – StjepanV

2

"127.0.0.1:2304"에서들을 시도해보십시오 : 여기

전체 코드입니다

self.m_pServer = CTSRSThreadedTCPServer (("127.0.0.1"을, 2304), CTSRSThreadedTCPRequestHandler)

+0

답장을 보내 주셔서 감사 합니다만 localhost는 127.0.0.1로 변환됩니다. 나는 그것의 지옥을 위해, 그러나 여전히 같은 효과를 시도했다 : ( – StjepanV

+2

IP 주소를 시도 blank.self.m_pServer = CTSRSThreadedTCPServer ((""2304), CTSRSThreadedTCPRequestHandler) – SKGOD

+0

감사합니다 SKGOD! 잘 작동합니다! – StjepanV

관련 문제