envoyer/recevoir des fichiers UDP en python

J'ai fait cet envoi /réception des scripts, mais je fichier corrompu !
je n'ai aucune idée de pourquoi je me fais de ce problème !

sender.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"

et ce le récepteur d'origine que j'ai modifier (fonctionne très bien 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"

que vous le remarquerez à la prise de fichier au début.

exigé:
client => envoyer un fichier (nom.ext) => serveur:enregistrer (nom.ext)

ma sortie :
corrompu fichier pdf et vide pour txt

  • Tout d'abord: except socket.timeout: n'est jamais à aller au travail. Vous êtes en train de faire from socket import *, donc socket dans votre code est en fait socket.socket. Vous devriez faire except timeout ou de l'utilisation import socket (fortement recommandée).
  • je me suis prise.délai d'attente: timed out ,,,, et quand j'envoie le fichier pdf puis de l'ouvrir, il dit que c'est un fichier corrompu , j'ai des connaissances de base sur le protocole UDP, j'ai essayé de faire de mon codé que j'ai dans la question, merci
  • merci à vous , vous avez corrigé l'erreur , mais j'ai un autre problème, si j'ai envoyé un fichier de petite taille, il ne s'arrêtera pas (moins de 1028) , mais quand j'ai envoyer des gros fichiers, il fonctionne très bien , je suis réflexion sur la modification de taille de la mémoire tampon
InformationsquelleAutor Hamoudaq | 2012-12-21