Я сделал эти сценарии отправки/получения, но я повредил файл! я понятия не имею, почему я получаю эту проблему!
отправитель.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()
приемник.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
(настоятельно рекомендуется). - person Thomas Orozco   schedule 21.12.2012