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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Projet Java Pair à Pair
    Bonjour,
    Voila je vous expose mon problème, euh mon projet:

    Nous devons développer un système de gestion de fichiers tolérant aux pannes.

    Donc nous disposons de 4 serveurs en réseau, qui possèdent des fichiers. Un client peut se connecte à un serveur et peut soit telecharger un fichier, soit uploader un fichier.

    Lorsqu'il uploade un fichier, celui-ci est récupéré en paquet(buffer de 512 octets) par le serveur et décide de l'envoyer en double exemplaire aux serveurs qu'il choisit en fonction de leur état de chargement.

    Exemple:

    Client -> Fichier F -> Serveur3
    Serveur3 -> F1 -> Serveur2 et Serveur3, F2 -> Serveur4 et Serveur1,
    F3-> Serveur 1 et Serveur4

    Et lorsque le client veut télécharger le fichier F, Serveur3 se débrouille pour aller chercher les fichiers la où ils sont.


    Je sais déjà comment gérer une application client/serveur multithread envoyer des fichier via sockets etc...

    A priori, on aura besoin d'une SDD qui enregistre quels serveur ont quelles parties de quels fichiers(Arraylist, tableau a double entrée).

    Aussi, si un serveur tombe en rade, tout les fichiers qu'il possédait se retrouve en 1 seul exemplaire, donc il faut redistribuer les fichiers sur les serveurs pour qu'il redevienne en double exemplaire.

    Voilà en gros ce qu'il y a faire, un bon projet comme on les aime.

    Merci pour vos indications.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Quel est le problème ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    Et tu veux qu'on le fasse à ta place ou t'as juste un problème?

  4. #4
    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
    Bah en fait, le problème c'est que je sais pas quelle SDD choisir exactement.
    Et comment dire aux autres serveurs que, par exemple, Serveur3 a envoyé F1 à Serveur4 et Serveur1.

    Et aussi lorsque le client veut télécharger un fichier comment le serveur arrive à trouver les parties du fichiers chez les serveurs.

    Mais le plus important c'est la SDD, c'est ça qui me bloque.

    Merci.

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ok, donc tu veux qu'on le fasse à ta place.

    Sinon, c'est quoi un SDD ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    pour déterminer ta structure de donnée, il n'y a pas d'avance, il te faut de l'huile de coude pour faire travailler le crayon/papier et du café pour faire travailler les méninges. Tu dois prendre tous tes besoins, mettre ça a plat sur papier et en déduire quels type de données il te faut en fonction de tes contraintes (performances?, checksum?, sécurité?, débit?, dedondance?). Une fois ça sur papier, tu affine tes conclusion jusqu'à atteindre quelque chose qui t'a l'air potable.

    On pourrait te donner des solutions nous même, mais on le fera sans analyse et sans connaissance des besoin, donc leur valeur approximera 0, et j'aime pas donner des réponses qui ne servent à rien.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Ok, donc tu veux qu'on le fasse à ta place.

    Sinon, c'est quoi un SDD ?
    Structure de données ou Sous Directeur de Développement ou Software Design Document ou Structured Descriptive Data ou....

    C'est aussi le symbole monétaire du Soudan

  8. #8
    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
    Ok, merci je vous redirai ce qu'il en est.

    ps: j'ai pas demandé à ce que quelqu'un le fasse à ma place et en plus je dèteste ça.

  9. #9
    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,

    Voila, j'ai trouvé ma SDD, une hashmap<String, ArrayList> qui pour un fichier donne la liste de ses parties avec les 2 serveurs dans lesquelles est stocké la partie.

    Mais j'ai un pb, quand je découpe le fichier par 512 octets, et que je l'envoie au 2 autres serveurs quelquefois le fichier crée pèse 0ko au lieu de 1ko. Et ça me bloque pour pouvoir envoyer le fichier complet à un autre client .

    Le code :

    Envoi du paquet de 512 octets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    OutputStream out1 = sock1.getOutputStream();
    OutputStream out2 = sock2.getOutputStream();
     
    out1.write(buffer);
    out1.flush();
    out1.close();
     
    out2.write(buffer);
    out2.flush();
    out2.close();
     
    sock1.close();
    sock2.close();
    Reception chez le serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    else if (message.indexOf("put") != -1) {
    	InputStream in = socketServeur.getInputStream();
     
    	byte[] buffer = new byte[512];
     
    	FileOutputStream fout = new FileOutputStream("fichier/" +message.substring(4));
    	while (in.read(buffer) != -1) {
    		fout.write(buffer);
    		fout.flush();
    	}
    	fout.close();
    }
    Voila, j'espère que vous m'aiderez à trouver la solution.
    Merci.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    ton message tu le récupère comment. T'aurais pas mis un bufferedReader sur ta socket par hasard?

  11. #11
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par luffy45 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	while (in.read(buffer) != -1) {
    		fout.write(buffer);
    		fout.flush();
    	}
    	fout.close();
    }
    Même si ça ne résoud pas ton souci, pour moi il y a une grôôsse boulette dans cette partie du code:

    Soit la taille du buffer égale à 512 octets, comme dans ton code (au passage, c'est horrible une valeur en dure comme ça !)

    - ton in.read(buffer) va lire entre 1 et 512 caractères sur la socket en fonction de la quantité de données qui arrivera au prochain paquet.

    - après chaque read, tu décidés d'écrire ce qui a été lu dans un fichier MAIS ton fout.write(buffer) qui écrit le contenu dans le fichier, lui, va systématiquement écrire la totalité du contenu du buffer, donc systématiquement écrire 512 octets alors que peut-être seulement 100 octets ont été récupérés de la socket !

    Fichiers corrompus à la réception quasi assurés !

    Dans ce cas précis, l'entier retourné par 'read' te servira ainsi que write(byte[] b, int off, int len).

+ Répondre à la discussion
Cette discussion est résolue.

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, 14h30
  2. [Run]comment executer un projet java sous eclipse
    Par snaioua dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/10/2005, 17h40
  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, 13h23
  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, 13h02

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