probleme de cloture ecoute reseau
:salut:
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:
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.
:merci: 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:
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:
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){}
}
} |