简体   繁体   English

扭曲似乎无法调用数据

[英]Twisted appears to not call dataReceived

I have been writing a proof-of-concept type program that sends a screenshot over the network, and for some reason, the dataRecieved method isn't being called after data is sent. 我一直在编写一个概念验证型程序,该程序通过网络发送屏幕截图,由于某种原因,在发送数据后未调用dataRecieved方法。 Here is my code 这是我的代码

SERVER 服务器

from twisted.internet import protocol, reactor
from twisted.internet.endpoints import TCP4ServerEndpoint
from PIL import Image

class ImageProto(protocol.Protocol):
    def dataReceived(self, data):
        print("test")
        print(isinstance(Image.open(data), Image.Image))
class ImageProtoFactory(protocol.Factory):
    def buildProtocol(self, addr):
        return ImageProto()
endpoint = TCP4ServerEndpoint(reactor, 1336)
endpoint.listen(ImageProtoFactory())
reactor.run()

CLIENT 客户

from twisted.internet.protocol import Protocol
from twisted.internet import reactor
from twisted.internet.endpoints import TCP4ClientEndpoint, connectProtocol
from PIL import ImageGrab
from io import BytesIO

class ImageSender(Protocol):
    def connectionMade(self):
        i = ImageGrab.grab()
        i.resize((1280, 720))
        output = BytesIO()
        i.save(output, format = "png")
        output.flush()
        self.transport.write(output.getvalue())
        self.transport.loseConnection()
        reactor.stop()
point = TCP4ClientEndpoint(reactor, "localhost", 1336)
d = connectProtocol(point, ImageSender())
reactor.run()

When you call reactor.stop at the end of connectionMade , you immediately shut down the whole process before any data is sent. 当在connectionMade的末尾调用reactor.stop时,您将立即关闭整个过程,然后再发送任何数据。 Remove it and you should be fine. 删除它,就可以了。

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

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