gpt4 book ai didi

Python:在计算机之间发送大文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:38 24 4
gpt4 key购买 nike

我正在尝试将文件 (~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 的套接字。您必须使用 SOCK_STREAM

s = socket(AF_INET,SOCK_STREAM)
host = sys.argv[1]
port = 9999
buf = 4096
addr = (host,port)

因此,您必须更改这两个脚本才能发送文件。对于本地网络,我建议使用简单的方法:

python3 -m http.server

并使用网络浏览器从客户端访问。它将显示本地文件夹。

关于Python:在计算机之间发送大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com