Threaded SocketServer未接收第二条消息

2024-05-03 05:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一个简单的线程SocketServer(使用SocketServer.ThreadedMixIn). 但是,我的服务器停止接收更多消息。代码如下:

#!/usr/bin/python -u
import SocketServer
import sys

class MYAgentHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        try:
            data = self.request.recv(1024)
            print "Received request " + str(data) + "\n"
            reply = str(agent.processAgentMessage(data))
            self.request.send(reply)
            self.request.close()
        except Exception, instr:
            print "While processing data " + data + " error encountered " + str(instr) + "\n"

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    daemon_threads = True
    allow_reuse_address = True
    def __init__(self, server_address, RequestHandlerClass):
        SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass)

class MYAgent:
    def processAgentMessage(self, msg):
        try:
            tokens = msg.split('^')
            if tokens[0] == "CreateSession":
                return("New session")
            elif tokens[0] == "GetStatus":
                return("Init")
        except Exception, instr:
            print "Error while processing message " + str(instr) + "\n"

agent = MYAgent()

def main():
    MYServer = sys.argv[1]
    MYAgentPort = sys.argv[2]
    agent.listener = ThreadedTCPServer((MYServer, int(MYAgentPort)), MYAgentHandler)
    agent.listener.serve_forever()

if __name__ == '__main__':
    main()

这是我的委托人:

#!/usr/bin/python -u
import socket
import time
if __name__ == "__main__":
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 15222))
    try:
        sock.send("CreateSession")
        sessionID = str(sock.recv(1024))
        print "Received: " + sessionID
        sock.send("GetStatus^"+sessionID)
        print "Sent Getstatus\n"
        time.sleep(1)
        response = str(sock.recv(1024))
        print "status of " + str(sessionID) + " is " + str(response) + "\n"
        sock.close()
    except Exception, instr:
        print "Error occurred " + str(instr) + "\n"

这里有一节课。服务器输出:

$ ./t.py localhost 15222
Received request CreateSession

客户端输出:

$ ./client.py
Received: New session
Sent Getstatus

status of New session is

$

你知道为什么会这样吗?你知道吗


Tags: importselfdatamainrequestdefsocketagent