Twisted, кажется, не вызывает dataReceived

Я писал программу типа "проверка концепции", которая отправляет снимок экрана по сети, и по какой-то причине метод dataRecceive не вызывается после отправки данных. Вот мой код

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

КЛИЕНТ

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

1 ответ

Решение

Когда вы звоните reactor.stop в конце connectionMadeВы немедленно завершаете весь процесс перед отправкой любых данных. Удалите его, и все будет в порядке.

Другие вопросы по тегам