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

Entrée/Sortie Java Discussion :

peer to peer


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut peer to peer
    Bonjour,
    j'essaie de creer deux entités (la meme x2) qui communiquent en sockets. et je ne sais pas comment faire.
    j'ai toujours utilisé les sockets en client/serveur, mais là, n'importe laquelle des deux parties peut initier la communication.
    je ne sais pas si ça marcherait si de chaque coté, une simple socket vide, puis un bind local, et quand il y a un message dans le buffer d'envoi (quand on connait l'adresse de destination) on fait un connect.

    Merci

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Les sockets sont en effet en client/serveur.

    À partir de là, il faut maniper pour faire semblant que ce soit du P2P.

    • par exemple tu ouvres une socket sur les deux postes : tous les deux serveurs et tous les deux clients !
    • par exemple tu fais un client/serveur classique et sur cette couche tu cales une communication P2P
    • etc.

    Tout cela dépend un peu de ton contexte. Les deux postes connaissent-ils leur IP ? Si non, comment vont-ils la connaitre ? Les deux postes sont-ils réellement équivalent ? Etc, encore une fois.

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Le P2P c'est du mode déconnecté non ?
    Pour cela il y a les DatagramSockets. Les classes Socket et ServerSocket fonctionnent, elles, sur le principe du mode connecté.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Ah ben tiens tu peux m'en dire plus le y@m's ?

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Le fonctionnement de la classe DatagramSocket et assez similaire à celui de la classe Socket (au niveau de "l'utilisation" dans le code j'entends bien).

    La première différence est que l'on utilise une DatagramSocket des deux cotés au lieu d'une Socket et d'une ServerSocket car il n'y a plus de notion client qui se connecte à un serveur (mode déconnecté ).

    La deuxième concerne la façon d'envoyer les données. En effet, on n'utilise pas les flux mais des DatagramPackets qui représente un paquet de données que tu envoies via la méthode send() de la classe DatagramSocket.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut JXTA
    J'ai déjà créé une application de P2P, en stage, et pour cela j'ai utilisé la plateforme de Sun : JXTA

    Par contre la doc en ligne sur le site officiel n'est plus dispo et les exemples sur le net se font assez rares.

    Une intro à JXTA ici : http://tag.u-strasbg.fr/~genaud/tuto.../cvs/jxta.html

    et une doc non officielle ici : http://www.srdc.metu.edu.tr/webpage/documents/jxta_doc/

    C'est puissant et c'est fait pour ça. Un énorme avantage si tu veux déployer ton application c'est que tu te fous de la localisation physique des machines (elles peuvent être à l'autre bout du monde, derrière un proxy et un firewall, tu n'a pas à connaitre leur IP, ton JXTA va les trouver (à condition d'utiliser un RelayPeer ou un truc comme ça il me semble ))

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Par défaut
    Pour completer la réponse de vince3147, je te donne 2 autres liens qui m'ont permis de dévelloper une application P2P avec JXTA

    http://www-inf.int-evry.fr/~defude/P2P/JXTA/
    http://www.2dconcept.com/jxta.html

    Bon courage.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    Salut,

    Citation Envoyé par le y@m's
    Le P2P c'est du mode déconnecté non ?
    Non. Le P2P c'est une architecture, ça ne dépend pas du protocole de communication utilisé. On peut très bien faire du P2P en utilisant TCP, UDP, UDP multicast.


    Il faut que chaque serveur écoute sur un port, dans le but que la communication soit amorcée par n'importe quelle machine.

    Toutefois tu risques d'avoir quelques problèmes. Dans un premier temps ça sera avec le NAT: si la machine se trouve derrière un routeur, alors il faudra rediriger les communications sur celle-ci. Si son port d'écoute est 45623, et son adresse 192.168.0.10, alors il faudra rediriger tous les paquets à destination du port 45623 à l'adresse 192.168.0.10.

    Pour éviter ce problème, certaines librairies comme JXTA utilisent des "peer relai". Ils servent d'intermédiaire entre 2 peers. La machine qui se trouve derrière le routeur va être connectée au relai. La seconde machine également. Chacune des machine va donc communiquer avec le relai, qui va transmettre les paquets à l'autre machine.
    De cette façon, pas besoin de configurer le NAT. Bien sûr, le peer relai ne doit pas se trouver derrière un routeur... Ou alors celui-ci doit être configuré.

    Second problème, les firewalls & proxy. Si c'est en entreprise, ils risquent de bloquer tous les ports sauf le 80. Et quasiment tous les protocoles sauf HTTP et HTTPS.
    Cela veut dire qu'écouter sur le port 80 ne suffira pas forcément: si le firewall constate que ce qu'il reçoit n'est pas du HTTP/HTTPS, alors il bloque le paquet. Il faut donc encapsuler tes infos dans une requête HTTP.


    Bref, tout dépend de ce que tu veux faire, mais je te conseil d'utiliser JXTA ou une autre lib de ce genre, car le P2P c'est loin d'être simple.


    P.S: il y a aussi la lib P2PSockets, mais il me semble qu'elle n'est plus maintenue ... Tu peux toutefois t'en inspirer.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    Citation Envoyé par gifffftane
    Tout cela dépend un peu de ton contexte. Les deux postes connaissent-ils leur IP ? Si non, comment vont-ils la connaitre ? Les deux postes sont-ils réellement équivalent ? Etc, encore une fois.
    Re,
    (c'est pas vraiment du peer to peer que je veux faire.)
    c'est la meme application qui tournera sur les deux machines.exactement la meme. et les deux machines ne connaissent pas leurs adresses IP, c'est au moment de l'initiation de la communication qu'on a l'adresse IP de destination.
    et c'est du TCP que je vais faire (socket) parce que j'ai deja la solution en datagramsocket et je veux l'adapter a TCP. le probleme de client serveur ne se pose pas en UDP.

    j'explique un peu le principe : mon application tourne en local et ecoute sur un port, dés qu'elle voit que la machine locale a emis un paquet de type X sur ce port la, elle prend ce paquet et l'envoi vers l'autre machine (l'adresse IP de destination et recupérée dans le contenu du paquet).
    donc les deux machines sont clients et serveurs en meme temps (dependant de celle qui a initié la communication).

    est ce qu'il y a une solution à ça?

    merci

  10. #10
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Tu veux que dès que la machine locale émet un paquet de type X, ton application détecte cet envoi, et le renvoie ailleurs ?

    Si c'est ça, je connais pas la réponse

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    la partie d'interception est deja faite.
    moi tout ce que je veux c'est que c'est paquets que j'ai reçus (des paquets UDP) , jles envoie en TCP (la transformation est deja implementée aussi).

    mon probleme c'est que n'importe quelle machine peut initier la communication!!
    (on sait pas si c'est A ou B, qui va appelé l'autre en premier).

    donc je veux savoir comment implementer une application (socket) qui peut etre en ecoute (serveur), et peut en meme temps emettre vers une adresse IP de destination (client) en utilisant TCP. sachant que je dois utiliser le meme numero de port.

    est ce que ca marche de lancer au demarrage, un serveur en ecoute sur le port (par exp 2000).
    et si jamais on a des données a envoyer, on créé une autre socket (client) sur le port 2000 aussi ???

  12. #12
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    J'ai peur de répondre oui, et j'ai peur de répondre non

    On peut probablement le faire marcher. Si le poste sur lequel est ton appli est serveur, alors plusieurs clients peuvent se connecter dessus, sur le même port (heureusement).

    Mais, étant serveur, il ne pourra envoyer des données que si un client le lui demande.

    Ce même poste, étant serveur sur le port 2000, peut très bien se connecter en tant que client sur un autre poste serveur, toujours sur le port 2000, ou sur celui qu'il voudra.

    La même machine peut servir de client et de serveur, elle peut accueillir plusieurs clients, plusieurs serveurs, toutefois on ne peut faire 2 serveurs différents sur la même machine sur le même port.

    Voilà... est-ce mieux ?

Discussions similaires

  1. [win XP] interdire le peer to peer
    Par chris21 dans le forum Windows XP
    Réponses: 19
    Dernier message: 14/05/2007, 13h33
  2. Stopper le peer to peer dans un réseau local
    Par spopo dans le forum Administration
    Réponses: 15
    Dernier message: 19/10/2005, 18h21
  3. Peer to Peer (vitesse) comparaison ADSL et Câble
    Par rigel dans le forum Développement
    Réponses: 4
    Dernier message: 22/09/2004, 21h56
  4. Idée pour développer un logiciel de peer to peer
    Par Jibees dans le forum Développement
    Réponses: 5
    Dernier message: 09/06/2003, 22h29

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