【发布时间】:2012-12-09 05:35:29
【问题描述】:
我已经制作了这个发送/接收脚本,但我损坏了文件! 我不知道为什么我会遇到这个问题!
发件人.py
#!/usr/bin/env python
from socket import *
import sys
s = socket(AF_INET,SOCK_DGRAM)
host =sys.argv[1]
port = 9999
buf =1024
addr = (host,port)
file_name=sys.argv[2]
f=open(file_name,"rb")
data = f.read(buf)
s.sendto(file_name,addr)
s.sendto(data,addr)
while (data):
if(s.sendto(data,addr)):
print "sending ..."
data = f.read(buf)
s.close()
f.close()
receiver.py
#!/usr/bin/env python
from socket import *
import sys
import select
host="0.0.0.0"
port = 9999
s = socket(AF_INET,SOCK_DGRAM)
s.bind((host,port))
addr = (host,port)
buf=1024
data,addr = s.recvfrom(buf)
print "Received File:",data.strip()
f = open(data.strip(),'wb')
data,addr = s.recvfrom(buf)
try:
while(data):
f.write(data)
s.settimeout(2)
data,addr = s.recvfrom(buf)
except timeout:
f.close()
s.close()
print "File Downloaded"
这是我修改过的原始接收器(工作正常 100%)
#!/usr/bin/env python
from socket import *
import sys
import select
host="0.0.0.0"
port = 9999
s = socket(AF_INET,SOCK_DGRAM)
s.bind((host,port))
addr = (host,port)
buf=1024
f = open("file.pdf",'wb')
data,addr = s.recvfrom(buf)
try:
while(data):
f.write(data)
s.settimeout(2)
data,addr = s.recvfrom(buf)
except timeout:
f.close()
s.close()
print "File Donwloaded"
你注意到它在开始时制作文件。
精确: 客户端 => 发送文件 (name.ext) => 服务器:保存 (name.ext)
我的输出: pdf 文件损坏,txt 文件为空
【问题讨论】:
-
首先:
except socket.timeout:永远不会起作用。你在做from socket import *,所以你的代码中的socket实际上是socket.socket。您应该使用except timeout或使用import socket(强烈推荐)。 -
我得到了socket.timeout:超时,,,,当我发送pdf文件然后打开它时它说它是损坏的文件,我有关于UDP的基本知识我已经尝试过我的编码在问题中提供,谢谢
-
@ThomasOrozco 谢谢你,你已经修复了错误部分,但是如果我发送一个小文件,它不会停止(小于 1028),但是当我发送大文件时,我遇到了另一个问题工作正常,我正在考虑更改缓冲区大小
标签: python sockets udp file-transfer sender