gpt4 book ai didi

Python SocketServer.BaseRequestHandler 不会与远程请求通信

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:17 25 4
gpt4 key购买 nike

我一直在使用 SocketServer.TCPServer 和 SocketServer.BaseRequestHandler 基类开发 Python 服务器。我正在使用主机“localhost”和端口 2304(未被任何其他程序使用)。

问题是我的服务器不会响应远程请求。我正在使用 Amazon 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()")

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

最佳答案

当然它不会响应远程请求,“localhost”就是它所说的意思,它是“本地主机”。您必须改为绑定(bind)到外部接口(interface),或者绑定(bind)到通用的“包罗万象”接口(interface)。

要绑定(bind)到所有接口(interface),请使用例如

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

作为地址的空字符串使服务器监听所有接口(interface)。

关于Python SocketServer.BaseRequestHandler 不会与远程请求通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com