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

Java Discussion :

Projet Java Pair à Pair


Sujet :

Java

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    Bonjour,

    Après le problème de l'upload du fichier sur le serveur, il y a le problème du téléchargement. Le fichier téléchargé l'est bizarrement.
    Exemple :
    Image que j'upload que le serveur:
    http://img193.imageshack.us/i/luffyr.jpg/

    Quand je la télécharge bien sur dans un autre dossier, j'obtiens cette image-la:
    http://img36.imageshack.us/i/luffyp.jpg/

    Et ce n'est pas du à des paquets qui arrivent dans le mauvais ordre puisque sinon le fichier serait corrompu et impossible à lire.

    Merci encore une fois de votre aide si généreuse.

  2. #22
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    faudrait voir ton code de téléchargement. Attention que les fichier .jpg sont très fortement tolérants aux erreurs. Si les premier paquets sont corrects, les suivants peuvent être corompu à 30% ou plus tout en restant vaguement ressemblant sur l'image.

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    En fait j'ai une Hashmap de nom de fichier et pour chaque fichier la liste des parties du fichiers. Quand j'upload un fichier j'enregiste le fichier dans la hashmap avec une liste vide puis je la remplis avec des objets de Type Paquet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class Paquet implements Comparable<Paquet> {
     
     
            private String nom_paquet;
    	private int numseq;
    	private int port_serveur1;
    	private int port_serveur2;
     
     
    	public Paquet(String nom_paquet, int numseq, int port_serveur1, int port_serveur2)
    	{
     
    		this.nom_paquet = nom_paquet;
    		this.numseq = numseq;
    		this.port_serveur1 = port_serveur1;
    		this.port_serveur2 = port_serveur2;
    	}
    Je diffuse a tout les serveurs que tel paquet a été envoyé a tels serveurs.
    Et quand je telecharge un fichier, le serveur regarde dans la hashmap et récupère la liste des paquets, la trie. E pour chaque paquet, se connecte au premier serveur et lui demande de lui envoyer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    synchronized (Serveur.liste_fichiers) {
    				liste_paquets = Serveur.liste_fichiers.get(fileName);
    			}
    Collections.sort(liste_paquets);
    for (Paquet p : liste_paquets) {
    	System.out.println(p.getNom_paquet());
    	int port = p.getPort_serveur1();
    	Socket s = new Socket("127.0.0.1", port);
    	new PrintWriter(s.getOutputStream(), true).println("get " +   
                                                                       p.getNom_paquet());
    	int port_transfert = 0;
    	if (port == 5000)
    		port_transfert = 5002;
    	else if (port == 6000)
    		port_transfert = 6002;
    	else if (port == 7000)
    		port_transfert = 7002;
    	else
    		port_transfert = 8002;
     
    	int byteLu;
    	Socket s_transfert = new Socket("127.0.0.1", port_transfert);
    	BufferedInputStream bin = new 
                                 BufferedInputStream(s_transfert.getInputStream());
    	while ((byteLu = bin.read(buffer)) != -1) {
    		bout.write(buffer, 0, byteLu);
    		bout.flush();
    	}
     
    	bin.close();
    	s_transfert.close();
    	s.close();
    }
    Le serveur qui reçoit la requête "get + nom_paquet" effectue ceci, et envoi le paquet au serveur qui le demande, qui lui se charge de le renvoyer au client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if (message.indexOf("get") != -1) {
    	Socket s = transfert.accept();
    	BufferedOutputStream bout = new 
                                           BufferedOutputStream(s.getOutputStream());
     
    	byte[] buffer = new byte[BUFFER_SIZE];
    	int byteLu;
    	FileInputStream fin = new FileInputStream("fichier/" + 
                                                                  message.substring(4));
    	while ((byteLu = fin.read(buffer)) >= 0) {
    		bout.write(buffer, 0, byteLu);
    		bout.flush();
    	}
    	fin.close();
    	bout.close();
    	s.close();
    }

    Code du client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BufferedInputStream bis = new BufferedInputStream(sock.getInputStream());
    FileOutputStream fout = new FileOutputStream("d:/" + fileName,false);
    byte[] buffer = new byte[BUFFER_SIZE];
    int byteLu;
    while ((byteLu = bis.read(buffer)) != -1) {
    	fout.write(buffer,0, byteLu);
    	fout.flush();
    }
    fout.close();
    sock.close();
    System.out.println("Fichier reçu.");
    Merci.

  4. #24
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Je vois pas d'erreur flagrante dans ce code. Reste donc deux possibilités

    1) il y aurait des "trous" dans ta liste de paquet (au fur et a mesure que tu sert le fichiers, affiche les numéros des paquets pour être sur
    2) Certains serveurs ont recu et stocké des paquets corrompus. Et maintenant ils te les reservent.

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    J'opte plus pour la deuxième réponse car pour la première j'ai déjà fait ce à quoi tu as pensé.

    Comment faire pour savoir si un paquet est corrompu?

    C'est la le problème.

    Merci.

  6. #26
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    quand tu réceptionne le paquet fait peut etre un md5sum dessus compare avec ce qui a été envoyé. Sinon, faut regarde le code pour saovir pourquoi ca se corromp.

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    J'ai bien des paquets corrompu quand j'utilise le MD5, je vais essayer de voir comment faire pour les rendre normaux.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Projet mini serveur de chat pair à pair
    Par marwa_miss dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 2
    Dernier message: 27/12/2009, 15h30
  2. [Run]comment executer un projet java sous eclipse
    Par snaioua dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/10/2005, 18h40
  3. [Eclipse 3.0.1]Ouvrir un projet java deja existant
    Par paca_mike dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 14h23
  4. Comment eviter de dedoubler projet c++ et projet java/applet
    Par buzzz dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 13/10/2004, 14h02

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