2012-09-02 41 views
2

我一直在使用SocketServer.TCPServer和SocketServer.BaseRequestHandler基類來開發Python服務器。我使用主機「本地主機」和端口2304(沒有被任何其他程序使用)。Python SocketServer.BaseRequestHandler不會與遠程請求通信

問題是我的服務器不會響應遠程請求。我正在使用亞馬遜AWS,並有一個靜態IP地址用於訪問。

當我測試亞馬遜本地機器上的服務器使用例如。瀏覽器,我發現我的服務器確實是東西,但遠程訪問保持阻止狀態。不知道如何打開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

當然,它不會響應遠程請求,「本地主機」的含義正是它所說的,它是「本地主機」。您必須將其綁定到外部接口,或綁定到通用的「全部捕獲」接口。

要綁定到所有接口,請使用例如

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!Works fine! – StjepanV