IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

envoi/reception fichier par socket


Sujet :

Réseau/Web Python

  1. #1
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut envoi/reception fichier par socket
    Bonjour,
    Je suis en train de programmer un systeme pour envoyer des fichier. ( par exemple un fichier de 500 Mo) pour ne pas a avoir a passer par des sites d'hebergement et mettre des plombes a les uploaders.
    Le transfert de fichier se fait par socket.
    Dans mon programme, il y a deux thread. Un pour l'emission, et un pour la reception (Serveur/Client)

    En fait ma question est :

    Comment faire pour que lorsque j'envoi mon fichier, le PC cible detecte la connection et commence la reception,
    Et que le PC emeteur commence l'envoi du fichier seulement si il a une reponse positive du PC recepteur?
    Sachant que le programme qui fait a la foi serveur et client doit etre installer sur les deux machines

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut
    Citation Envoyé par rezuz Voir le message
    Comment faire pour que lorsque j'envoi mon fichier, le PC cible detecte la connection et commence la reception,
    Et que le PC emeteur commence l'envoi du fichier seulement si il a une reponse positive du PC recepteur?
    Sachant que le programme qui fait a la foi serveur et client doit etre installer sur les deux machines
    Vous n'avez rien à faire!

    C'est ainsi que fonctionne le modèle client/serveur sous-jacent :
    - le serveur attend une requête sur un port tcp/ip (que vous avez définit),
    - un client demande une connexion a ce host:port,
    - le serveur l'accepte ou la rejette,
    - les échanges de données peuvent alors commencer,

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Points : 115
    Points
    115
    Par défaut
    J'ajouterais même que, si tu veux faire cela, utlise le protocole TCP et non UDP.

    TCP établi une connexion en trois étape (SYN) avant de commencer à envoyer les donnée. Si le serveur distant est occupé ou simplement indisponible, le client n'enveras pas les donnée. De plus avec TCP, si un paquet est altérer lors du transfert,celui-ci est réenvoyer... C'est le principe même de TCP, (controle et fiabilité)

    Par contre UDP ne fait rien de tout cela, le client envoie les donnée directement. Pas demande de connexion, pas de somme de controle sur les donnée.. rien du tout... Il a le seul avantage, d'etre vraiment plus rapide à l'exécution... Mais pas du tout conseiller pour le transfert de fichier...

  4. #4
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    mais, par exemple, si je lui envoi un fichier .jpg Il va falloir que de son coté, le client donc, receptionne les paquets et les écrive dans un fichier avec l'extension .jpg, non ? parce que si je lui envoi les paquets il va les recevoir, mais qu'est ce qu'il va en faire ?

    EDIT: je confirme que le client doit accepter la connection, sinon on obtient ce message d'erreur
    error: [Errno 10060] Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par rezuz Voir le message
    mais, par exemple, si je lui envoi un fichier .jpg Il va falloir que de son coté, le client donc, receptionne les paquets et les écrive dans un fichier avec l'extension .jpg, non ? parce que si je lui envoi les paquets il va les recevoir, mais qu'est ce qu'il va en faire ?

    EDIT: je confirme que le client doit accepter la connection, sinon on obtient ce message d'erreur
    error: [Errno 10060] Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu
    C'est ce qu'on appelle le "Serveur" qui accepte la connexion et ce qu'on appelle le "Client" qui en fait la demande. Ce que font client ou serveur des données échangées (et ou ils les trouvent) est définit par le code de l'application.

    Exemple: Avec un navigateur Web - le client -, lorsqu'on fait une requête HTTP vers www.google.com:
    • le client se connecte au serveur DNS du coin pour savoir a quelle adresse IP correspond à www.google.com,
    • il ouvre une connexion TCP/IP vers cette adresse sur le port 80 (http)
    • il envoie un message de la forme:

    HTTP/1.1 GET /www.google.com
    HOST: le host
    Accept: text/html; charset="latin-1"
    ...autres headers...
    le "host" retourne (normalement) une réponse contenant une page HTML que le navigateur interprète et affiche - ce qui se traduit généralement par l'envoi et la récupération d'autres messages HTTP
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Apres maint essais, je vous annonce, que je n'arrive meme pas a faire un chat. Pourtant dans mon code tout a l'air parfait, je n'est pas d'erreur, ... :/, alors pour l'intant mon logiciel de transfert de fichier et pas encore pres pour le moment.

    pour le moment, je vais juste vous demander si il est normal que avec le code si-dessous, mon second Thread ne exécute pas?
    import socket
    from threading import Thread

    PORT = 139
    HOST = "192.168.0.10"

    class ThServeur(Thread):
    def __init__(self, contact):
    Thread.__init__(self)
    self.s = contact

    def run(self):
    print "ThreadServeur en fonction"



    class ThClient(Thread):
    def __init__(self, contact):
    Thread.__init__(self)
    self.s = contact

    def run(self):
    print "ThreadClient en fonction"



    Soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    Th_S = ThServeur(Soc)
    Th_C = ThClient(Soc)
    Th_S.start()
    Th_C.start()
    une fois sur deux, il ne me retourne que le premier print :/

Discussions similaires

  1. Envoi de Fichier par Socket
    Par devalender dans le forum WinDev
    Réponses: 2
    Dernier message: 20/06/2008, 12h59
  2. Envoie de fichier par socket
    Par eracius dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 05/10/2007, 11h21
  3. Envoi de fichier par socket
    Par thebloodyman dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/08/2007, 17h07
  4. Envoi de fichier par socket
    Par dr_octopus74 dans le forum Réseau
    Réponses: 42
    Dernier message: 19/01/2007, 17h59
  5. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo