Help: asyncore/asynchat and terminator string

Gabriel Genellina gagsl-py at yahoo.com.ar
Tue Jan 16 21:56:55 EST 2007


At Tuesday 16/1/2007 20:05, David Hirschfield wrote:

>I'm implementing a relatively simple inter-application communication
>system that uses asyncore/asynchat to send messages back and forth.
>
>The messages are prefixed by a length value and terminator string, to
>signal that a message is incoming, and an integer value specifying the
>size of the message, followed by the message data.
>
>My question is: how can I produce a short terminator string that won't
>show up (or has an extremely small chance of showing up) in the binary
>data that I send as messages?

If you send previously the size of data to follow, there is no need 
for a terminator. On the receiving side, just read so many bytes; 
it's a lot easier. Anyway you can add a terminator, and check for it 
after the data arrives, just a small consistency test.

If you can't do that for whatever reason, usually it's done 
backwards: ensure the chosen (fixed) terminator never happens inside 
the message.
Example: encoding using || as terminator, % as quote character:
- any | inside the message is prefixed by the quote character: | -> %|
- any % inside the message is doubled: % -> %%
This way, any terminator inside the message would be converted to 
%|%| and could never be confused.
At the receiving side, decode as follows:
- search for any % character; when found, delete it and keep the 
following character; keep searching until no more % are found.



-- 
Gabriel Genellina
Softlab SRL 


	

	
		
__________________________________________________ 
Preguntá. Respondé. Descubrí. 
Todo lo que querías saber, y lo que ni imaginabas, 
está en Yahoo! Respuestas (Beta). 
¡Probalo ya! 
http://www.yahoo.com.ar/respuestas 




More information about the Python-list mailing list