python扭曲简单的服务器客户端

时间:2012-12-09 16:13:52

标签: python networking network-programming twisted

我正在尝试构建一个简单的“当天引用”服务器和客户端,从扭曲的教程文档中修改。我希望从客户那里打印出“当天的报价”以证明沟通。但是,据我所知,客户端没有连接。这是我的代码。

服务器

from twisted.python import log
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor

class QOTD(Protocol):
    def connectionMade(self):
        self.transport.write("An apple a day keeps the doctor away\r\n") 
        self.transport.loseConnection()

class QOTDFactory(Factory):
    def buildProtocol(self, addr):
        return QOTD()

# 8007 is the port you want to run under. Choose something >1024
endpoint = TCP4ServerEndpoint(reactor, 8007)
endpoint.listen(QOTDFactory())
reactor.run()

客户端

import sys
from twisted.python import log
from twisted.internet import reactor
from twisted.internet.protocol import Factory, Protocol
from twisted.internet.endpoints import TCP4ClientEndpoint

class SimpleClient(Protocol):
    def connectionMade(self):
        log.msg("connection made")
        #self.transport.loseConnection()

    def lineReceived(self, line):
        print "receive:", line

class SimpleClientFactory(Factory):
    def buildProtocol(self, addr):
        return SimpleClient()

def startlog():
    log.startLogging(sys.stdout)

point =  TCP4ClientEndpoint(reactor, "localhost", 8007)
d = point.connect(SimpleClientFactory)
reactor.callLater(0.1, startlog)
reactor.run()

1 个答案:

答案 0 :(得分:2)

  • 将SimpleClientFactory的实例,而不是类本身传递给point.connect()
  • 如果使用lineReceived
  • ,则从twisted.protocol.basic.LineReceiver继承SimpleClient而不是Protocol
  • endpoint.listenpoint.connect的结果调用addErrback来处理错误