On Wed, 15 Jan 2014 02:37:05 -0800, Paul Pittlerson wrote: >> One extremely critical point about your protocol. TCP is a stream - you >> don't have message boundaries. You can't depend on one send() becoming >> one recv() at the other end. It might happen to work when you do one >> thing at a time on localhost, but it won't be reliable on the internet >> or when there's more traffic. So you'll need to delimit messages; I >> recommend you use one of two classic ways: either prefix it with a >> length (so you know how many more bytes to receive), or terminate it >> with a newline (which depends on there not being a newline in the >> text).
> I don't understand. Can you show some examples of how to do this? How much do you understand about tcp/ip networking? because when trying to build something on top of tcp/ip, it's a good idea to understand the basics of tcp/ip first. A tcp/ip connection is just a pipe that you pour data (octets, more or less analagous to bytes or characters) into at one end, and it comes out at the other end. For your stream of octets (bytes / characters) to have any meaning to a higher level program, then the applications using the pipe at both ends have to understand that a message has some structure. The message structure might be to send an n character message length count (where in a simple protocol n would have to be a fixed number) followed by the specified number of characters. Assuming your maximum message length is 9999 characters: You could send the characters 9999 followed by 9999 characters of message content. The receiving end would receive 4 characters, convert them to the number 9999, and assume the next 9999 characters will be the message. Then it expects another 4 character number. You could send json encoded strings, in which case each message might start with the "{" character and end with the "}" character, but you would have to allow for the fact that "}" can also occur within a json encoded string. You might decide that each message is simply going to end with a specific character or character sequence. Whatever you choose, you need some way for the receiving application to distinguish between individual messages in the stream of octets / bytes / characters that is coming out of the pipe. -- Denis McMahon, denismfmcma...@gmail.com -- https://mail.python.org/mailman/listinfo/python-list