[Tutor] socket and lost data
Kent Johnson
kent37 at tds.net
Fri Jan 27 12:08:17 CET 2006
le dahut wrote:
> Hi,
> I try to send some data across a network (between 400KB and 10MB) like
> this :
> def envoyer(conn, mysize):
> print mysize,' KB sent'
> data = '1'*1024
> data_end = data[:-5]+'#####'
> data = data*(mysize-1)
> begining = time.time()
> conn.send(data)
> conn.send(data_end)
> passed = time.time() - begining
> return passed, size
>
socket.send() may not send all the data - it returns a count telling you
what it actually did. Use socket.sendall() or put your call to send() in
a loop.
> and receive it like this :
>
> def recevoir(conn):
> data=''
> while 1:
> tmpdata = conn.recv(8192)
> data += tmpdata
> if '#####' in data:
> print 'END OF DATA'
> break
> print len(data)/1024, ' KB received'
> return passed, int(data[-15:-5])/1024
socket.recv() will return an empty string when there is no more data - I
would look for that instead of your marker, it is more general. Instead of
if '#####' in data:
you can say
if data == '':
or just
if not data:
>
> But I don't receive as much data that I sent ... does someone know why ?
> If I want to send the same data back to the client, do I have to destroy
> and recreate the socket ?
If this doesn't fix it, maybe an example of the lost data would help.
Kent
More information about the Tutor
mailing list