【发布时间】:2010-09-26 11:32:26
【问题描述】:
我编写了一个小程序,通过 udp 套接字连接将文件从客户端发送到服务器.. 程序正常工作,但如果我传输的文件大于 8192 kb,则流停止并且我收到的文件已损坏.. 如何避免这种限制?
server.py
host = ...
port = ...
filename = ...
buf = 2048
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(addr)
f = open(filename, 'wb')
block,addr = UDPSock.recvfrom(buf)
while block:
if(block == "!END"): # I put "!END" to interrupt the listener
break
f.write(block)
block,addr = UDPSock.recvfrom(buf)
f.close()
UDPSock.close()
client.py
host = ...
port = ...
filename = ...
buf = 2048
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
f = open(filename, 'rb')
block = f.read(buf)
while block:
UDPSock.sendto(block, addr)
block = f.read(buf)
UDPSock.sendto("!END", addr)
f.close()
UDPSock.close()
【问题讨论】:
-
请说明为什么需要使用UDP;如果你愿意,可以问一个单独的问题。使用 UDP 进行文件传输不必要地复杂,在高延迟链接上高效执行非常复杂。
-
我需要使用 UDP,因为我的项目是在我的本地网络中创建一个 voip,所以我需要非常快速的数据包传输,我不需要高质量的音频并且我在本地工作,所以我不需要'没有高延迟链接..但现在我正在测试主机之间设置配置调整块大小和传输之间的睡眠时间..我正在寻找最佳折衷速度/质量(我发布了另一个问题但没有答案..stackoverflow.com/questions/3789675/…)
-
UDP 和 TCP 不是相互排斥的,应用程序可以将两者用于不同的目的。例如,许多游戏都使用两者。如果需要,您还可以使用多个 TCP 连接。
-
这是一个家庭作业问题吗?您坚持使用 UDP 听起来像是人为的限制。
-
只是在网上冲浪我读到 TCP 对于实时数据传输来说太慢了。我犯规了?
标签: sockets udp limit transfer