У меня очень простая клиентская программа:
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()
Я подключаюсь к Java-сервису, внедренному в Apache CXF (и некоторому частному фирменному коду).
Соединяется нормально, отправляет сообщение, служба принимает его и выдает ответ.
К сожалению, этот клиент не ждет, пока сервер выдаст свое сообщение, но отключается сразу после отправки сообщения. Таким образом, вывод, который я получаю от клиента:
connection made.
message sent
connection lost: Connection was closed cleanly.
И, конечно, служба Java выдает исключение, сообщающее о том, что соединение уже закрыто.
Что мне здесь не хватает?
РЕДАКТИРОВАТЬ: добавление этой строки показывает, что сообщение получено, поскольку оно печатает его правильно:
def dataReceived(self, data):
print(data)
self.transport.loseConnection()
Итак, настоящая проблема в том, что функция stringReceived()
не вызывается Может быть, у меня неправильная подпись для этой функции?