J'ai un pogramme Client.jar avec un bouton de connexion à un serveur
et un pogramme Serveur.jar avec un bouton de connexion du serveur,
cela fonctionne tres bien, par contre meme si cote serveur et cote client:
BufferedReader InputStreamReader est ferme
PrintWriter est ferme
socket est ferme

le port d'ecoute est toujours present,
meme en fermant les 2 application

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
C:\Documents and Settings\vrinette>netstat /a|find "8080"
  TCP    homer:8080             homer:0                LISTENING
  TCP    homer:8080             127.1.1.0:1779         TIME_WAIT
port utiliser 8080 et appelle en local, meme probleme entre deux micro.

pour fermer le port d'ecoute il faut que je kill 2 process
javaw.exe
si bien que si je me deconnecte du reseau pour reussir à refaire la reconnection Client Serveur c'est pas simple.

d'essayer de m'expliquer ce qui ne vas pas
je suis en java 6 et programmation avec eclipse Version: 3.4.0

Code client.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
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
 
import javax.swing.JButton;
import javax.swing.JFrame;
/** Le processus client se connecte au site fourni dans la commande
 *   d'appel en premier argument et utilise le port distant 8080.
 */
public class Client {
   static final int port = 8080;
   static JButton Connecter;
	static JFrame Plateau;
 
   public static void main(String[] args) throws Exception {
		  Plateau = new JFrame("Presse Papier");
		  Plateau.getContentPane().setLayout(null);
		  Plateau.setBounds(0,0,400,250);
		  Plateau.setVisible(true);
 
//	    bouton connecte
		  Connecter=new JButton("Connecter Client");
		  Connecter.setBounds(190,110,150,30);
		  Connecter.addActionListener(new ActionListener()  {
	    	    public void actionPerformed(ActionEvent evt){
	    	    	Connecter_Click(evt);
	    	    }});  	
	      Plateau.getContentPane().add(Connecter);
	      Connecter.setVisible(true);
	      Connecter.repaint(); 
 
 
 
 
 
   }
   public static void Connecter_Click(ActionEvent evt){
		  String Intitule;
 
		  try{
		  Intitule=Connecter.getText();
		  // pas connecter
		  if (Intitule.compareTo("Connecter Client") == 0){
			  Connecter.setText("Deconnecter Client");
			   Socket socket = new Socket("127.1.1.0", 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++) {
		           pred.println(str);          // envoi d'un message
		           str = plec.readLine();      // lecture de l'écho
		        }
		        System.out.println("END");     // message de terminaison
		        pred.println("END") ;
		        plec.close();
		        pred.close();
		        socket.close();		
		        Connecter.setText("Connecter Client");
		  }else{
			  Connecter.setText("Connecter Client");
		  }
		  }catch (Exception e){}
	  }
}
Code serveur.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
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class Serveur {
   static final int port = 8080;
   static JButton Connecter;
	static JFrame Plateau;
 
   public static void main(String[] args) throws Exception {
		  Plateau = new JFrame("Presse Papier");
 
		  Plateau.getContentPane().setLayout(null);
		  Plateau.setBounds(0,0,400,250);
		  Plateau.setVisible(true);
 
//	    bouton connecte
		  Connecter=new JButton("Connecter Serveur");
		  Connecter.setBounds(190,110,150,30);
		  Connecter.addActionListener(new ActionListener()  {
	    	    public void actionPerformed(ActionEvent evt){
	    	    	Connecter_Click(evt);
	    	    }});  	
	      Plateau.getContentPane().add(Connecter);
	      Connecter.setVisible(true);
	      Connecter.repaint();	   
   }
   public static void Connecter_Click(ActionEvent evt){
		  String Intitule;
 
		  try {
		  Intitule=Connecter.getText();
		  // pas connecter
		  if (Intitule.compareTo("Connecter Serveur") == 0){
			  Connecter.setText("Deconnecter Serveur");
			  ServerSocket s = new ServerSocket(port);
			  Socket soc = s.accept();
 
			  // Un BufferedReader permet de lire par ligne.
			  BufferedReader plec = new BufferedReader(
			                         new InputStreamReader(soc.getInputStream())
			                        );
 
			  // Un PrintWriter possède toutes les opérations print classiques.
			  // En mode auto-flush, le tampon est vidé (flush) à l'appel de println.
			  PrintWriter pred = new PrintWriter(
			                       new BufferedWriter(
			                          new OutputStreamWriter(soc.getOutputStream())), 
			                       true);
 
			  while (true) {
			     String str = plec.readLine();          // lecture du message
			     if (str.equals("END")) break;
			     System.out.println("ECHO = " + str);   // trace locale
			     pred.println(str);                     // renvoi d'un écho
			  }
			  plec.close();
			  pred.close();
			  soc.close();
			  Connecter.setText("Connecter Serveur");
 
		  }else{
			//  Connecter.setText("Connecter Serveur");
		  }
		  }catch (Exception e){}
	  }
}