扭曲的客户端连接丢失

时间:2011-12-19 10:40:02

标签: python twisted

我有一个非常简单的客户端程序:

class EchoClient(Int32StringReceiver):

    def connectionMade(self):
        print 'connection made.'
        str = "<request><commands><dbtest /></commands></request>"
        self.sendString(str)
        print 'message sent'

    def stringReceived(self, line):
        print "receive:", line
        self.transport.loseConnection()

class EchoClientFactory(ClientFactory):

    def buildProtocol(self, addr):
        return EchoClient()

    def clientConnectionFailed(self, connector, reason):
        print 'connection failed:', reason.getErrorMessage()
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print 'connection lost:', reason.getErrorMessage()
        reactor.stop()

def main():
    factory = EchoClientFactory()
    reactor.connectTCP('localhost', 3604, factory)
    reactor.run()

我连接到Apache CXF中实现的Java服务(以及一些专有的公司代码)。

它连接正常,发送消息,服务接收它并产生响应。

可悲的是,此客户端不会等待服务器生成其消息,而是在发送消息后立即断开连接。所以我从客户端获得的输出是:

connection made. 
message sent 
connection lost: Connection was closed cleanly.

当然,Java服务会抛出异常,抱怨连接已经关闭。

我在这里缺少什么?

编辑:添加此行表示收到邮件,因为它正确打印:

def dataReceived(self, data):
    print(data)
    self.transport.loseConnection()

所以真正的问题是没有调用stringReceived()函数。也许我对这个功能有错误的签名?

1 个答案:

答案 0 :(得分:0)

我在这里做点什么:

def lengthLimitExceeded(self, length):
    print('length limit exceeded: {}'.format(length))

打印:

length limit exceeded: 2147483793
length limit exceeded: 2147483793

这是0x80000091,所以看起来我们的专有API正在以一种奇怪的方式实现NString协议(可能使用MSB来实现其他目的)。