[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