Twisted 服务器/客户端之间的多个调用/响应消息

我有一个在 Twisted 中实现的基本服务器和客户端。我的目标是让客户端处理一些数据,将其进度报告给服务器,然后重复直到处理完所有数据。客户端能够向服务器发送初始消息,但它没有收到服务器的响应,让它知道可以开始处理该数据。这是我的代码。


服务器:


from twisted.internet import reactor, protocol


PORT = 9000


progress = 0


class MyServer(protocol.Protocol):


    def dataReceived(self, data):

        global progress

        print(data)

        if data != "Ready?":

            progress = int(data)

        self.transport.write("Got it.")

        self.transport.loseConnection()


    def connectionLost(self, reason):

        global progress

        if progress == 10:

            print("Completed.")

            reactor.stop()


class MyServerFactory(protocol.Factory):

    protocol = MyServer


factory = MyServerFactory()

reactor.listenTCP(PORT, factory)

reactor.run()

客户:


from twisted.internet import reactor, protocol

import time


HOST = 'localhost'

PORT = 9000


progress = 0


class MyClient(protocol.Protocol):


    def connectionMade(self):

        self.transport.write("Ready?")

        self.transport.loseConnection()


    def dataReceived(self, data):

        global progress

        progress += 1

        print(progress)

        self.transport.write(str(progress))

        self.loseConnection()


    def connectionLost(self, reason):

        global progress

        if progress == 10:

            print("Completed.")

            reactor.stop()


class MyClientFactory(protocol.ClientFactory):

    protocol = MyClient


factory = MyClientFactory()

reactor.connectTCP(HOST, PORT, factory)


reactor.run()


潇潇雨雨
浏览 223回答 1
1回答

MMMHUHU

我发现我的问题是我过早地关闭了连接。在一些早期的测试中,我试图在dataReceived函数中发送多条消息,这些消息被连接成一条消息。这让我相信您必须断开连接才能通过每条消息。相反,您只需要在发送另一条消息之前让函数完成即可。这是按预期工作的更新代码。服务器:from twisted.internet import reactor, protocolPORT = 9000progress = 0class MyServer(protocol.Protocol):    def dataReceived(self, data):        global progress        print(data)        if data != "Ready?":            progress = int(data)        self.transport.write("Got it")        if progress == 10:            self.transport.loseConnection()    def connectionLost(self, reason):        print("Completed.")        reactor.stop()class MyServerFactory(protocol.Factory):    protocol = MyServerfactory = MyServerFactory()reactor.listenTCP(PORT, factory)reactor.run()客户:from twisted.internet import reactor, protocolimport timeHOST = 'localhost'PORT = 9000progress = 0class MyClient(protocol.Protocol):    def connectionMade(self):        self.transport.write("Ready?")    def dataReceived(self, data):        global progress        progress += 1        print(progress)        self.transport.write(str(progress))        if progress == 10:            self.transport.loseConnection()    def connectionLost(self, reason):        print("Completed.")        reactor.stop()class MyClientFactory(protocol.ClientFactory):    protocol = MyClientfactory = MyClientFactory()reactor.connectTCP(HOST, PORT, factory)reactor.run()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python