On 29/08/13 17:15, Sivakumar Balasubramanian wrote:
Dear Phil,
I replaced thye dataReceived function by stringReceived, and ran the code.
But when I do this, the program does not even enter the stringReceived function.
That implies your protocol isn't an int16string-prefixed one. I assumed
it was, since you'd inherited from that class.
Obviously you will need to pick a base class that matches the actual
structure of your protocol.
I also tried a modified version of the programs above with LineReceived
protcol, and here too I have the same problem of fragmented data from the
dataReceived function.
Well, *again* you shouldn't be overriding dataReceived if you're
inheriting from LineReceiver. You should be overriding lineReceived.
To be clear: dataReceived gets raw data. It can, and *will*, get
incomplete messages, because it doesn't know anything about messages.
If you have a protocol with a message structure, you either need to:
1. Inherit from an existing base-class which handles the message
framing, and implement the "<msg>Received" handler specific to that
protocol.
2. Or, if there's no base-class matching your message framing, write
your own - this will entail buffering the data, then extracting messages.
See here:
http://twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#Whyisprotocol.dataReceivedcalledwithonlypartofthedataIcalledtransport.writewith
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python