[EMAIL PROTECTED] wrote:

I wanted to ask for standard ways to receive data from a socket stream
(with socket.socket.recv()). It's simple when you know the amount of
data that you're going to receive, or when you'll receive data until
the remote peer closes the connection. But I'm not sure which is the
best way to receive a message with undetermined length from a stream
in a connection that you expect to remain open. Until now, I've been
doing this little trick:

data = client.recv(256)
new = data
while len(new) == 256:
    new = client.recv(256)
    data += new

That works well in most cases. But it's obviously error-prone. What if
the client sent *exactly* two hundred and fifty six bytes? It would
keep waiting for data inside the loop. Is there really a better and
standard way, or is this as best as it gets?

Sorry if this is a little off-topic and more related to networking,
but I'm using Python anyway.

You solve this by having a protocol that the client and server both agree on, so that the client knows how much to read from the server. There are any number of ways of doing this, all of which depend on the kind of data you want to transfer and for what purpose.

--
Erik Max Francis && [EMAIL PROTECTED] && http://www.alcyone.com/max/
 San Jose, CA, USA && 37 18 N 121 57 W && AIM, Y!M erikmaxfrancis
  In the final choice a solider's pack is not so heavy a burden as a
   prisoner's chains. -- Dwight D. Eisenhower, 1890-1969
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to