【发布时间】:2014-08-12 14:43:28
【问题描述】:
我正在尝试将文件 (~340 MB) 从公司网络中的一台计算机发送到另一台计算机。
发送完成后,另一台计算机收到约 325 MB。
~ 15 MB 已丢失。
我在计算机 192.169.0.5 上运行我的客户端脚本
python3 client.py
后来我在 192.168.0.4 上运行我的服务器脚本
python3 server.py 192.168.0.5 test.sql
我的服务器源代码是:
s = socket(AF_INET,SOCK_DGRAM)
host = sys.argv[1]
port = 9999
buf = 4096
addr = (host,port)
s.connect((host , port))
file_name=sys.argv[2]
f=open(file_name,"rb")
data = f.read(buf)
print('Sending file '+ file_name +' ...')
sent_size = 0
while True:
if(s.send(data)):
sent_size += buf
mb = round(sent_size / 1024 / 1024, 2)
sys.stdout.write("\rSent: "+ str(mb) +" MB")
sys.stdout.flush()
time.sleep(0.001)
data = f.read(buf)
else:
print('\n- Finished')
s.close()
break
我的客户端源代码是:
host="0.0.0.0"
port = 9999
s = socket(AF_INET,SOCK_DGRAM)
s.bind((host,port))
addr = (host,port)
buf=4096
while True:
data,addr = s.recvfrom(buf)
if data:
data,addr = s.recvfrom(buf)
b2 = 0
f = open("recv/received.deb",'wb')
while(data):
f.write(data)
s.settimeout(2)
b2 += buf
mb = round(b2 / 1024 / 1024, 2)
sys.stdout.write("\rReceived: "+ str(mb) +" MB")
sys.stdout.flush()
data,addr = s.recvfrom(buf)
break
一切都适用于小文件(~1MB),但如果我们想发送更大的文件(300MB),数据包会丢失.. 我该如何解决这个问题?
【问题讨论】:
-
您正在使用 UDP,数据包可能会丢失。请改用 TCP。
-
另外 - 注意你如何测量你的文件大小 - 如果你正在查看不同的文件系统类型,甚至是不同的块大小,即使内容完全相同,你也可能会得到不同的文件大小。
标签: python sockets file-transfer