How to send/receive data file over socket?
I am writing a socket programming wi开发者_StackOverflow社区th Python in order to send/receive a file over TCP.
While I am sending/receiving data, I figured out it neither sent nor received the part of files.
Here is a part to send a part of data based on the size of the buffer.
msg[i] = file[i].read()
file[i].close()
while 1:
tdata[i], msg[i] = msg[i][:buf], msg[i][buf:]
c.send(tdata[i])
if len(msg[i]) < buf:
break
Please help me out how to send/receive the whole data completely.
It will stop sending when len(msg[i]) < buf
, so the end of data may be missing.
If you want to send all of msg[i], it's better to do:
while msg[i]:
tdata[i], msg[i] = msg[i][:buf], msg[i][buf:]
c.sendall(tdata[i])
or just send it in one go:
c.sendall(msg[i])
Note that send()
will return how many bytes were actually sent (because it won't necessarily send all of them), so if you want to send all (which is usually the case) use sendall()
instead.
I would try something like this:
import shutil
shutil.copyfileobj(open('data'), c.makefile('wb'))
This is how the SimpleHTTPServer module does it.
精彩评论