Application serveur client

Résolu
LearnDeep Messages postés 70 Statut Membre -  
LearnDeep Messages postés 70 Statut Membre -
Bonjour a tous

voici la classe Client:
package pack9;
import java.io.*;
import java.net.*;
 
public class Client {
     
 
 
public static void main(String[] args) throws Exception {
     final int port = 8080;
    InetAddress localhost=InetAddress.getLocalHost();
    Socket socket = new Socket(localhost, port);
System.out.println("SOCKET = " + socket);
     
 
BufferedReader plec = new BufferedReader( new InputStreamReader(socket.getInputStream()));
 
 
PrintWriter pred = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
 
 
 
String str = ("bonjour");
 
for (int i = 0; i < 10; i++) {
    // envoi d'un message
    pred.println(str);
     
    // lecture
    String fromServer = plec.readLine();
 
System.out.println(fromServer);
}
System.out.println("END");
 
// message de terminaison
pred.println("END") ;
plec.close();
pred.close();
socket.close();
 
}
}

Classe serveur :
package pack9;
import java.io.*;
import java.net.*;

public class Serveur {

 static final int port=8080;
 
 public static void main(String[] args) throws Exception{
  // TODO Auto-generated method stub
    
ServerSocket s= new ServerSocket (port);
Socket client=s.accept();


BufferedReader plec= new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter pred=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
 
while (true) {
 // lecture du message
String str = plec.readLine(); 

if (str.equals("END")) {
System.out.println("END");
break;
}
//écriture de message
pred.println(str);
}
client.close();
plec.close();
pred.close();

}
 }


l'erreur dans la classe serveur :
Exception in thread "main" java.net.BindException: Address already in use: NET_Bind
at java.base/java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.base/java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.base/java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.base/java.net.PlainSocketImpl.bind(Unknown Source)
at java.base/java.net.ServerSocket.bind(Unknown Source)
at java.base/java.net.ServerSocket.<init>(Unknown Source)
at java.base/java.net.ServerSocket.<init>(Unknown Source)
at pack9.Serveur.main(Serveur.java:12)

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, as-tu essayé avec d'autres valeurs que 8080?
    0
    1. LearnDeep Messages postés 70 Statut Membre
       
      bonjour , le probleme est dans la classe serveur
      mais la classe client quand je l'execute ell affiche :
      SOCKET = Socket[addr=DESKTOP-BNMDA02/192.168.137.1,port=8080,localport=55909]
      null
      null
      null
      null
      null
      null
      null
      null
      null
      null
      END


      mais la classe serveur ne s'exécute pas ! .
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > LearnDeep Messages postés 70 Statut Membre
       
      tu n'as pas répondu à ma question:
      as-tu essayé avec d'autres valeurs que 8080 (dans la classe serveur, bien sûr)?
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      as-tu essayé avec d'autres valeurs que 8080 (dans la classe serveur, bien sûr)?
      0
    4. LearnDeep Messages postés 70 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      oui j'ai esssayé mais ça n'as pas marché
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > LearnDeep Messages postés 70 Statut Membre
       
      quelle message d'erreur?
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    En effet, le programme est censé fonctionner. Mais si le port est déjà pris, soit par un autre logiciel, soit par une exécution précédente toujours en cours, alors il ne peut pas être utilisé en même temps.

    Dans le cas où c'est un autre logiciel sur le PC, il suffit d'utiliser un autre port (côté serveur et client)

    Dans le cas où c'est un processus Java qui utilise le port tu peux les lister avec la commande
    jps

    C:\Users\KX> jps
    1234 Serveur
    6789 Jps

    Puis arrêter le processus avec la commande
    taskkill

    C:\Users\KX> taskkill /F /PID 1234
    Opération réussie : le processus avec PID 1234 a été terminé.
    0
    1. LearnDeep Messages postés 70 Statut Membre
       
      Bonjour , dans mon cmd (windows 10) la commande jps
      n'est pas reconnue
      le chemin C:\Users\KX> n'est pas trouvable
      0
      1. KX Messages postés 19031 Statut Modérateur 3 020 > LearnDeep Messages postés 70 Statut Membre
         
        "le chemin C:\Users\KX> n'est pas trouvable"
        Euh... oui... Jusque là rien d'anormal. Mais la commande peut être fait n'importe où.

        "la commande jps n'est pas reconnue"
        Donc le JDK n'est pas bien configuré. Il faudrait le rajouter au PATH pour accéder aux commandes javac ou jps
        https://mkyong.com/java/how-to-set-java_home-on-windows-10/
        0
      2. KX Messages postés 19031 Statut Modérateur 3 020 > LearnDeep Messages postés 70 Statut Membre
         
        Tu peux également faire la commande
        netstat -abo
        qui t'afficheras la liste des ports ouverts avec le nom du programme et le PID correspondant.

        Exemple :
        C:\Users\KX> jps
        1234 Serveur
        6789 Jps
        C:\Users\KX> netstat -abo

        Connexions actives

          Proto  Adresse locale         Adresse distante       État            PID
          TCP    0.0.0.0:8080           PC-KX:0                LISTENING       1234
         [javaw.exe]
        0