Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2008 16:41:20

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

В Twisted transport.write глючит

Такая фишка. Клиент-сервер работает через twisted.internet.protocol.Protocol. Когда сервер отвечает на запрос клиент, transport.write, первый раз в процедуре-ответа, то сообщение тут же отправляется, вызывая второй раз и больше, transport.write игнорируется. Подскажите что делать!!!! АААА!!!



Офлайн

#2 Янв. 24, 2008 17:01:33

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

В Twisted transport.write глючит

Сделал мелкий клиент-сервер, работает… Пока думаю..



Офлайн

#3 Янв. 24, 2008 20:00:14

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

В Twisted 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()
client.py
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)

Офлайн

#4 Фев. 1, 2008 13:08:46

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

В Twisted transport.write глючит

Отказался от твистеда. Неудобная штука, куча функций, проще свой написать. И написал на основе asyncore.



Офлайн

#5 Фев. 6, 2008 12:17:05

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

В Twisted transport.write глючит

Весёлый монолог :)
А можно подробнее про твистед? Что было так неудобно?

Офлайн

#6 Апрель 30, 2008 14:31:02

NuINu
От:
Зарегистрирован: 2008-04-30
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

В Twisted transport.write глючит

дело прошлое, но всетаки…
на клиенте надо:

    def dataReceived(self, data):
print 'data received'
out = StringIO.StringIO(data)
print cPickle.load(out)
print cPickle.load(out)
out.close()
print data
иначе pickle будет читать вашу строку всегда с начала.
потому и не работает.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version