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 :

Client serveur UDP en JAVA


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut Client serveur UDP en JAVA
    Bonjour,
    Je débute dans la programmation des sockets en JAVA. J'ai fait l'implémentation d'un serveur et d'un client UDP, ce qui marche apparemment bien. Mais seulement lorsque je récupère le datagramme réçu sur le serveur pour le re-expédié au client, le seveur s'arrête, je ne comprends pourquoi?

    Merci beaucoup d'avance pour votre aide.

  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 : 42
    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
    Sans code, on ne pourra pas faire grand chose
    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
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut Arrêt de serveur UDP
    Citation Envoyé par dinobogan Voir le message
    Sans code, on ne pourra pas faire grand chose
    Le code du serveur est le suivant :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    //package package_UDP;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
     
    public class ServeurUDP {
     
            static int hostport = 8532;
            static String hostname = "localhost";
            static byte[] buffer ;
     
     
    	public static void envoi (String hostname, int hostport, byte[] buffer){
    		try{
    			InetAddress host_address = InetAddress.getByName(hostname);
    			DatagramSocket socket = new DatagramSocket();
    			DatagramPacket paquet = new DatagramPacket(buffer, buffer.length,host_address,hostport);
    			socket.send(paquet);
    		}catch(Exception e){
    		    System.err.println("Erreur: "+e);
    		}
     
    	}
     
            static public DatagramPacket reception (int hostport){
                    try{
    			DatagramSocket socket = new DatagramSocket(hostport);
                            while(true){
                            DatagramPacket paquet = new DatagramPacket(new byte[512],512);
                            socket.receive(paquet);
                            System.out.println("Addresse Serveur:"+ paquet.getAddress());
                            System.out.println("Donnees recues :"+ new String(paquet.getData()));
                            return paquet;
                           }
                            }catch(Exception e){
    			System.err.println("Erreur: "+e);
                            return null;
                    }
     
            }
     
        /*    static public void reception (int hostport){
                    try{
    			DatagramSocket socket = new DatagramSocket(hostport);
                            while(true){
                            DatagramPacket paquet = new DatagramPacket(new byte[512],512);
                            socket.receive(paquet);
                            System.out.println("Contenu du paquet Addresse Serveur:"+ paquet.getAddress());
                            System.out.println("Contenu du paquet Donnees:"+ new String(paquet.getData()));
                            }
                          }catch(Exception e){
    			System.err.println("Erreur: "+e);
                         }
     
            } */ 
     
     
    	public static void main(String[] args) throws IOException{
     
            //Reception du paquet
            DatagramPacket paquet = reception(hostport); //pb:recupration du paquet pour le renvoyer au clientle serveur s arrete apres la first reception
     
            //reception(hostport);
     
            //envoi du paquet
            hostname = paquet.getAddress().getHostAddress();
            hostport = paquet.getPort();
            buffer = paquet.getData();
            envoi(hostname,hostport,buffer);
                  }
    }
    et celui du 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    //package package_UDP;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
     
    public class ClientUDP {
     
    	/**
             * @param args
             */
    	public static String gets() throws IOException {
                    System.out.println("Entrez une chaine de caracteres et validez");
    		BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
    		String retour = console.readLine();
    		return retour;
    	}
     
    	public static void envoi (String hostname, int hostport, byte[] buffer){
    		try{
    			InetAddress host_address = InetAddress.getByName(hostname);
    			DatagramSocket socket = new DatagramSocket();
    			DatagramPacket paquet = new DatagramPacket(buffer, buffer.length,host_address,hostport);
    			socket.send(paquet);
    		}catch(Exception e){
    		    System.err.println("Erreur: "+e);
    		}
     
    	}
     
    	static public void reception (int hostport){
    		try{
    			DatagramSocket socket = new DatagramSocket(hostport);
    			DatagramPacket paquet = new DatagramPacket(new byte[512],512);
    			socket.receive(paquet);
                            System.out.println("Paquet recu : "+ new String(paquet.getData()));
    		}catch(Exception e){
    			System.err.println("Erreur: "+e);
    		}
    	}
    	public static void main(String[] args) throws IOException{
    		// TODO Auto-generated method stub
     
                    //envoi du message
                    //String hostname = args[0];
                    String hostname = "localhost";
                    int hostport = 8532;
                    while(true){
                    byte[] buffer = gets().getBytes();
                    envoi(hostname,hostport,buffer);
     
                    //reception du message
                    //reception(hostport);
                    }
    	}
     
    }
    Merci beaucoup d'avance

  4. #4
    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 : 42
    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
    Ton serveur réceptionne un message, puis le retourne au client. Et quel est l'instruction suivante ? Il n'y en a pas. Donc le serveur s'arrête, c'est normal.

    Tu dois faire une boucle (while par exemple, à toi de déterminer la condition d'arrêt) dans laquelle le serveur va recevoir et envoyer les messages.
    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.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Ton serveur réceptionne un message, puis le retourne au client. Et quel est l'instruction suivante ? Il n'y en a pas. Donc le serveur s'arrête, c'est normal.

    Tu dois faire une boucle (while par exemple, à toi de déterminer la condition d'arrêt) dans laquelle le serveur va recevoir et envoyer les messages.
    Salut,
    J'ai modifié le code précédent et le résultat est le suivant :

    La classe ServeurUDP.java
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    //package package_UDP;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
     
    public class ServeurUDP {
     
            static int hostport = 8532;
            static String hostname = "localhost";
            static byte[] buffer ;
     
     
    	public static void envoi (String hostname, int hostport, byte[] buffer){
    		try{
    			InetAddress host_address = InetAddress.getByName(hostname);
    			DatagramSocket socket = new DatagramSocket();
    			DatagramPacket paquet = new DatagramPacket(buffer, buffer.length,host_address,hostport);
    			socket.send(paquet);
    		}catch(Exception e){
    		    System.err.println("Erreur: "+e);
    		}
     
    	}
     
            static public DatagramPacket reception (int hostport){
                    try{
    			DatagramSocket socket = new DatagramSocket(hostport);
                           // while(true){
                            DatagramPacket paquet = new DatagramPacket(new byte[512],512);
                            socket.receive(paquet);
                            System.out.println("Addresse Serveur:"+ paquet.getAddress());
                            System.out.println("Donnees recues :"+ new String(paquet.getData()));
                            return paquet;
                           //}
                            }catch(Exception e){
    			System.err.println("Erreur: "+e);
                            return null;
                    }
     
            }
     
        /*    static public void reception (int hostport){
                    try{
    			DatagramSocket socket = new DatagramSocket(hostport);
                            while(true){
                            DatagramPacket paquet = new DatagramPacket(new byte[512],512);
                            socket.receive(paquet);
                            System.out.println("Contenu du paquet Addresse Serveur:"+ paquet.getAddress());
                            System.out.println("Contenu du paquet Donnees:"+ new String(paquet.getData()));
                            }
                          }catch(Exception e){
    			System.err.println("Erreur: "+e);
                         }
     
            } */ 
     
     
    	public static void main(String[] args) throws IOException{
     
            while(true){
            //Reception du paquet
            DatagramPacket paquet = reception(hostport); //pb:recupration du paquet pour le renvoyer au clientle serveur s arrete apres la first reception
     
            //reception(hostport);
     
            //envoi du paquet
            hostname = paquet.getAddress().getHostAddress();
            hostport = paquet.getPort();
            buffer = paquet.getData();
            envoi(hostname,hostport,buffer);
            }
         }
       }
    La classe ClientUDP.java
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    //package package_UDP;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
     
    public class ServeurUDP {
     
            static int hostport = 8532;
            static String hostname = "localhost";
            static byte[] buffer ;
     
     
    	public static void envoi (String hostname, int hostport, byte[] buffer){
    		try{
    			InetAddress host_address = InetAddress.getByName(hostname);
    			DatagramSocket socket = new DatagramSocket();
    			DatagramPacket paquet = new DatagramPacket(buffer, buffer.length,host_address,hostport);
    			socket.send(paquet);
    		}catch(Exception e){
    		    System.err.println("Erreur: "+e);
    		}
     
    	}
     
            static public DatagramPacket reception (int hostport){
                    try{
    			DatagramSocket socket = new DatagramSocket(hostport);
                           // while(true){
                            DatagramPacket paquet = new DatagramPacket(new byte[512],512);
                            socket.receive(paquet);
                            System.out.println("Addresse Serveur:"+ paquet.getAddress());
                            System.out.println("Donnees recues :"+ new String(paquet.getData()));
                            return paquet;
                           //}
                            }catch(Exception e){
    			System.err.println("Erreur: "+e);
                            return null;
                    }
     
            }
     
        /*    static public void reception (int hostport){
                    try{
    			DatagramSocket socket = new DatagramSocket(hostport);
                            while(true){
                            DatagramPacket paquet = new DatagramPacket(new byte[512],512);
                            socket.receive(paquet);
                            System.out.println("Contenu du paquet Addresse Serveur:"+ paquet.getAddress());
                            System.out.println("Contenu du paquet Donnees:"+ new String(paquet.getData()));
                            }
                          }catch(Exception e){
    			System.err.println("Erreur: "+e);
                         }
     
            } */ 
     
     
    	public static void main(String[] args) throws IOException{
     
            while(true){
            //Reception du paquet
            DatagramPacket paquet = reception(hostport); //pb:recupration du paquet pour le renvoyer au clientle serveur s arrete apres la first reception
     
            //reception(hostport);
     
            //envoi du paquet
            hostname = paquet.getAddress().getHostAddress();
            hostport = paquet.getPort();
            buffer = paquet.getData();
            envoi(hostname,hostport,buffer);
            }
         }
       }
    Seulement lorsque j'exécute, la première itération se passe plus ou moins bien (l'envoi des données du serveur vers le client n'est pas effectué). L'erreur suivante se produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur:java.net.BindException: Address already in use : cannot bind Exception in thread "main" java.lang.NullPointerException at ServeurUDP.main(ServeurUDP.java:71
    Par la suite le serveur s'arrête.

    Merci beaucoup d'avance pour votre aide

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/11/2012, 15h07
  2. Blocage recvmsg (client/serveur udp)
    Par tenebriox dans le forum Réseau
    Réponses: 1
    Dernier message: 07/11/2012, 20h47
  3. Réponses: 3
    Dernier message: 29/08/2009, 00h35
  4. Mon Client / Serveur UDP plante
    Par DjSeblaterreur dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/07/2007, 17h12
  5. [ServerSocket]Problème communication client-serveur udp sur linux
    Par gdecrouez dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 29/09/2006, 14h59

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