为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇潇雨雨 2021-11-16 16:26:51
我有一个在 Twisted 中实现的基本服务器和客户端。我的目标是让客户端处理一些数据,将其进度报告给服务器,然后重复直到处理完所有数据。客户端能够向服务器发送初始消息,但它没有收到服务器的响应,让它知道可以开始处理该数据。这是我的代码。服务器: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.")        self.transport.loseConnection()    def connectionLost(self, reason):        global progress        if progress == 10:            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?")        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 = MyClientfactory = MyClientFactory()reactor.connectTCP(HOST, PORT, factory)reactor.run()
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

我发现我的问题是我过早地关闭了连接。在一些早期的测试中,我试图在dataReceived函数中发送多条消息,这些消息被连接成一条消息。这让我相信您必须断开连接才能通过每条消息。相反,您只需要在发送另一条消息之前让函数完成即可。这是按预期工作的更新代码。


服务器:


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

        if progress == 10:

            self.transport.loseConnection()


    def connectionLost(self, reason):

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


    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 = MyClient


factory = MyClientFactory()

reactor.connectTCP(HOST, PORT, factory)


reactor.run()



查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信