我一直在使用SocketServer.TCPServer和SocketServer.BaseRequestHandler基类开发Python服务器。我正在使用主机“localhost”和端口2304(未被任何其他程序使用)。
问题是我的服务器不会响应远程请求。我使用的是亚马逊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()")
#----------------------------------------------------------
答案 0 :(得分:4)
当然它不会响应远程请求,“localhost”正是它所说的,它是“本地主机”。您必须改为绑定到外部接口,或者绑定到通用的“catch-all”接口。
要绑定到所有接口,请使用例如
self.m_pServer = CTSRSThreadedTCPServer(('', 2304), CTSRSThreadedTCPRequestHandler)
作为地址的空字符串使服务器监听所有接口。
答案 1 :(得分:1)
尝试收听“127.0.0.1:2304”:
self.m_pServer = CTSRSThreadedTCPServer((“127.0.0.1”,2304),CTSRSThreadedTCPRequestHandler)