2013-04-25 3 views
0

Python кодировщиковPython Twisted для длинных данных

Я работаю с витым для создания сервера, который получит 3000 байт данных по каждому соединению, мой вопрос заключается в том, что пакеты были усечены и хранятся в базе данных на пакеты штук , То, что я ищу, является способом решения таких пакетов данных, которые необходимо проанализировать как одну длинную информацию.

Line получил это не способ, причиной такого рода данных посылается withuot разделителем, тогда я имею в виду на пути цикла, однако я не совсем уверен, что это или как реализовать

from twisted.internet.protocol import Factory, Protocol 
from twisted.internet import reactor 
import binascii 
from Datagram import * 

class LingServer(Protocol): 


    def __init__(self): 
     print 'Staring Ling Server' 
     pass 

    def connectionMade(self): 
     try: 
      print 'Accepted connection' 
     except ValueError: 
      print "Oops! Connection was not started" 

    def connectionLost(self, reason): 
     print "Connection lost ", reason 

    def dataReceived(self, data): 
     try: 
      print "Data received ", data 
      data = binascii.hexlify(data) 
      Datagram (header=data[:10], content=data[10:]) 
      session.commit() 

      #self.transport.write(self.decoder.processDatagram(data)) 
     except ValueError: 
      print "Oops! That was no valid data. Try again..." 


class LingFactory(Factory): 

    def __init__(self): 
     pass 

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

reactor.listenTCP(12345, LingFactory()) 
reactor.run() 

ответ

1

TCP ориентирован на поток. См. the FAQ entry for this topic.

Если вы хотите загрузить до 3000 байт до обработки, см. twisted.protocols.stateful.StatefulProtocol. Например:

class LingServer(StatefulProtocol): 
    def getInitialState(self): 
     return self.ling, 3000 

    def ling(self, data): 
     # Process here, len(data) == 3000