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 :

Écoute de ports


Sujet :

Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Écoute de ports
    Bonjour à tous,

    Travaillant actuellement sur un projet d'école, j'ai besoin que mon programme puisse écouter un port spécifié par l'utilisateur afin de récuperer les données envoyé par un logiciel spécifique.

    J'ai tenté avec des Server, SocketServer, mais rien n'à été concluant. J'arrive à créer un socket client/server, cela fonctionne mais je n'arrive pas à écouter un port utilisées par un programme.

    Existe-t-il une méthode, une API et quelque chose qui rend cela possible ?

    Vous allez me dire "les ports sont privées" mais s'il s'agit d'un port utilisé par un logiciel libre par exemple.


    Merci à tous,
    Thomas.

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    pour "écouter" sur un port, il suffit de créer une instance de la classe ServerSocket via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ServerSocket server = new ServerSocket(port);
    Socket s  = server.accept();
    // s permet de dialoguer avec le client

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    pour "écouter" sur un port, il suffit de créer une instance de la classe ServerSocket via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ServerSocket server = new ServerSocket(port);
    Socket s  = server.accept();
    // s permet de dialoguer avec le client
    Merci pour ta proposition, mais est-ce qu'il ne s'agit pas plutôt d'une façon d'écouter sur port qu'on à nous même instancié ??

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je ne comprends pas bien.
    Si une application écoute déjà sur un port, on ne pourra pas écouter avec une autre application sur ce même port puisqu'il est déjà occupé.

  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 : 43
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    La seule solution est de faire du natif. C'est impossible en Java.

  6. #6
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    quand on "écoute" sur un port, c'est qu'on veux justement répondre au client. On prend en charge le port. Si ce que tu veux faire c'est sniffer ce qui passe sur un port, c'est impossible en java, faut faire du natif.

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    quand on "écoute" sur un port, c'est qu'on veux justement répondre au client. On prend en charge le port. Si ce que tu veux faire c'est sniffer ce qui passe sur un port, c'est impossible en java, faut faire du natif.
    En admettant qu'en fait, il s'agisse d'un logiciel openSource qui après traitement d'une image de webcam envoie les données (positions des yeux) sur le port 3333 afin de permettre aux développeurs de créer leur propre application de traitement.

    Est-il toujours impossible de les récupérer ? Si non, quelle serait la méthode la plus approchante ?

    Encore merci à tous et surtout à ceux ayant contribué

  8. #8
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    pour écouter sur un port et traiter ce qu'on t'y envoie, comme déjà dit, faut créer un ServerScoekt sur ce port et y attendre les connection de tes clients.

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    pour écouter sur un port et traiter ce qu'on t'y envoie, comme déjà dit, faut créer un ServerScoekt sur ce port et y attendre les connection de tes clients.
    Arf, c'est ce que je fais depuis tout à l'heure, j'attends la connexion qui ne vient jamais. Pourtant lorsque je test avec un p'tit module fourni avec l'appli, il arrive à recevoir les paquets UDP... j'pige pas :s apparament, je ne reçois pas de demande de connexion et mon .accept() tourne indéfiniment.

  10. #10
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    ha mais oui mais non! ServerSocket c'est pour du tcp, pas de l'udp, tu peux toujours attendre tes client udp avec ça, t'es pas prêt de les voir. Pour recevoir des données udp, il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DatagramSocket s = new DatagramSocket(port);
    DatagramPacket packet = new DatagramPacket(buffer,taille);
    while(true){
     s.recieve(packet);
     .....
    }

  11. #11
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Voici ce que je voulais faire exactement :
    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
    35
    36
    37
    38
    39
    40
    41
     
    package listengate;
     
    import java.io.IOException;
    import java.net.*;
    import java.util.logging.*;
     
    public class Main {
     
        private static int port = 3333;
        private static String ip = "127.0.0.1";
        private static InetAddress hote;
        private static int taille = 2048;
     
        public static void main(String[] args) {
            try {
                hote = InetAddress.getByName(ip);
                byte[] buf = new byte[taille];
     
                DatagramSocket socket = new DatagramSocket(port, hote);
                DatagramPacket packet = new DatagramPacket(buf, buf.length);
     
                while(true) {
                    try {
                        socket.receive(packet);
                        String chaine = new String(packet.getData(), 0, packet.getLength() );
                        System.out.println(chaine);
                    } catch (IOException ex) {
                        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
     
            } catch (SocketException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnknownHostException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
     
        }
     
    }
    Merci à tous pour votre participation

    J'ai réussis à faire ce que je voulais mais si quelqu'un à des astuces pour optimiser, je suis toujours preneur.

    Thomas.

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

Discussions similaires

  1. Inclure un programme d'écoute de port dans une Applet
    Par Baltha83 dans le forum Applets
    Réponses: 0
    Dernier message: 12/04/2012, 09h29
  2. Réponses: 4
    Dernier message: 21/11/2011, 22h54
  3. Empêcher l'écoute de ports
    Par allergique dans le forum VB.NET
    Réponses: 13
    Dernier message: 26/12/2009, 19h43
  4. [Sécurité] PHP et l'écoute de port
    Par Qamalito dans le forum Langage
    Réponses: 9
    Dernier message: 25/06/2007, 08h34

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