首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python客户端的self.transport.write()问题

Python客户端的self.transport.write()问题
EN

Stack Overflow用户
提问于 2018-08-03 05:30:25
回答 1查看 1.1K关注 0票数 0

我在python中有一个非常基本的扭曲的服务器/客户端设置。

server.py:

代码语言:javascript
复制
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor

class Echo(Protocol):

    def __init__(self, factory):
        self.factory = factory

    def connectionMade(self):
        print("Connection made")

    def connectionLost(self):
        print("Connection lost")

    def dataReceived(self, data):
        print("Received data")
        print(data)
        self.transport.write(data)


class EchoFactory(Factory):
    def buildProtocol(self, addr):
        return Echo(self)


def main():
    PORT = 9009 #the port you want to run under. Choose something >1024
    endpoint = TCP4ServerEndpoint(reactor, PORT)
    endpoint.listen(EchoFactory())
    reactor.run()


if __name__ == "__main__":
    main()

client.py:

代码语言:javascript
复制
from twisted.internet import reactor
from twisted.internet.protocol import Protocol
from twisted.internet.endpoints import TCP4ClientEndpoint, connectProtocol

class Greeter(Protocol):
    def sendMessage(self, msg):
        print('sending message')
        self.transport.write("MESSAGE %s\n" % msg)
        print('message sent')

def gotProtocol(p):
    p.sendMessage("Hello")
    reactor.callLater(1, p.sendMessage, "This is sent in a second")
    reactor.callLater(2, p.transport.loseConnection)

PORT = 9009
point = TCP4ClientEndpoint(reactor, "localhost", PORT)
d = connectProtocol(point, Greeter())
d.addCallback(gotProtocol)
print('running reactor')
reactor.run()

服务器工作正常,因为我已经使用Telnet客户端对其执行了fine操作,并收到了预期的响应。然而,当我尝试运行client.py时,它停留在“self.transport.write(”消息%s\n“% msg)”。或者至少我假设它是这样做的,因为最后打印到控制台的内容是“发送消息”。

我已经找了好几天了,但似乎找不到哪里出了问题(我对网络相当陌生)。我在这里做错了什么?我使用的是Python 3,运行的是Windows 8.1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 10:21:37

它不会被self.transport.write("MESSAGE %s\n" % msg)卡住,它实际上在那里失败了。Transport.write只接受bytes。对字符串进行编码,它应该可以工作。

代码语言:javascript
复制
class Greeter(Protocol):

    def sendMessage(self, msg):
        print('sending message')
        self.transport.write(("MESSAGE %s\n" % msg).encode('utf8'))
        print('message sent')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51662414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档