Форум сайта python.su
Такая фишка. Клиент-сервер работает через twisted.internet.protocol.Protocol. Когда сервер отвечает на запрос клиент, transport.write, первый раз в процедуре-ответа, то сообщение тут же отправляется, вызывая второй раз и больше, transport.write игнорируется. Подскажите что делать!!!! АААА!!!
Офлайн
Сделал мелкий клиент-сервер, работает… Пока думаю..
Офлайн
Нашел!
server.py
from twisted.internet import reactor, protocol import cPickle class DD(protocol.Protocol): def connectionMade(self): print '%s connection made' % self.transport.client[0] def dataReceived(self, data): print '%s data received' % self.transport.client[0] hello = cPickle.loads(data) self.transport.write(cPickle.dumps(hello+'1')) self.transport.write(cPickle.dumps(hello+'2')) def connectionLost(self, reason): print '%s connection lost' % self.transport.client[0] if __name__ == '__main__': factory = protocol.ServerFactory() factory.protocol = DD reactor.listenTCP(2222, factory) reactor.run()
from twisted.internet import reactor, protocol import cPickle class DDClient(protocol.Protocol): def connectionMade(self): print 'connection made' self.transport.write(cPickle.dumps('hello')) def dataReceived(self, data): print 'data received' print cPickle.loads(data) print data def connectionLost(self, reason): print 'connection lost' if __name__ == '__main__': factory = protocol.ClientFactory() factory.protocol = DDClient reactor.connectTCP('localhost', 2222, factory) reactor.run()
Отредактировано (Янв. 25, 2008 15:55:38)
Офлайн
Отказался от твистеда. Неудобная штука, куча функций, проще свой написать. И написал на основе asyncore.
Офлайн
Весёлый монолог :)
А можно подробнее про твистед? Что было так неудобно?
Офлайн
дело прошлое, но всетаки…
на клиенте надо:
def dataReceived(self, data):
print 'data received'
out = StringIO.StringIO(data)
print cPickle.load(out)
print cPickle.load(out)
out.close()
print data
Офлайн