如何使用python 3.5中的UDP套接字将大文件(视频,音频)从我的客户端传输到本地主机中的服务器?我能够发送一个小的.txt文件,但不能发送其他文件类型。请给我一些建议。 谢谢!
这是我传输文本文件的代码。
客户代码:
import socket
import sys
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
host = '127.0.0.1'
port=6000
msg="Trial msg"
msg=msg.encode('utf-8')
while 1:
s.sendto(msg,(host,port))
data, servaddr = s.recvfrom(1024)
data=data.decode('utf-8')
print("Server reply:", data)
break
s.settimeout(5)
filehandle=open("testing.txt","rb")
finalmsg=filehandle.read(1024)
s.sendto(finalmsg, (host,port))
服务器代码:
import socket
host='127.0.0.1'
port=6000
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(("",port))
print("waiting on port:", port)
while 1:
data, clientaddr= s.recvfrom(1024)
data=data.decode('utf-8')
print(data)
s.settimeout(4)
break
reply="Got it thanks!"
reply=reply.encode('utf-8')
s.sendto(reply,clientaddr)
clientmsg, clientaddr=s.recvfrom(1024)
答案 0 :(得分:0)
不要使用UDP传输大文件,请使用TCP。
UDP不会让您发送的所有数据包都到达,或者如果它们按顺序到达,它们甚至可能会被复制。此外,UDP不适合大型传输,因为1)它没有拥塞控制,所以你只会泛滥网络,数据包将被丢弃,2)你必须将你的数据包分解成较小的数据包通常大约1400字节是建议保持在MTU以下,否则如果您依赖IP碎片并且丢失了一个片段,则整个文件将丢失。您必须编写自定义代码来修复UDP的所有这些问题,因为文件传输需要一切都可靠地发送。
另一方面,TCP已经完成了这一切,它是可靠的,具有拥塞控制并且无处不在 - 您正在通过HTTP查看此网页,这是在TCP之上。答案 1 :(得分:0)
如果必须使用UDP而不是TCP或应用程序级协议,则应该能够使用zfec之类的包来“生成冗余块”,以便即使不是全部,也可以重建原始数据。数据包被接收。