简体   繁体   English

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

[英]Python SocketServer.BaseRequestHandler wont communicate to remote requests

I've been developing Python server using SocketServer.TCPServer and SocketServer.BaseRequestHandler base classes. 我一直在使用SocketServer.TCPServer和SocketServer.BaseRequestHandler基类开发Python服务器。 I'm using host "localhost" and port 2304 (not used by any other program). 我正在使用主机“localhost”和端口2304(未被任何其他程序使用)。

The problem is that my server wont respond to remote request. 问题是我的服务器不会响应远程请求。 I'm using Amazon AWS and have an static IP address for access. 我正在使用Amazon AWS并拥有静态IP地址以进行访问。

When I test the server on the Amazon local machine using eg. 当我使用例如在Amazon本地计算机上测试服务器时。 browser, I see that my server does it's stuff, but remote access stays blocked. 浏览器,我看到我的服务器做了它的东西,但远程访问仍然被阻止。 No clue how to open 2304 port to be accessible from outside local machine. 不知道如何打开2304端口可以从外部本地机器访问。

Here is the whole code: 这是整个代码:

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()")

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

Of course it wont respond to remote requests, "localhost" means exactly what it says, it's the "local host". 当然它不会响应远程请求,“localhost”正是它所说的,它是“本地主机”。 You have to bind to the external interface instead, or to the generic "catch-all" interface. 您必须改为绑定到外部接口,或者绑定到通用的“catch-all”接口。

To bind to all interfaces use eg 绑定到所有接口使用例如

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

The empty string as the address makes the server listen on all interfaces. 空字符串作为地址使服务器侦听所有接口。

Try listen at "127.0.0.1:2304": 试试听“127.0.0.1:2304”:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM