Socket et Threads - Java - Programmation
Marsh Posté le 03-03-2005 à 17:07:34
Bon, je suis un peu rouille en Java, mais je ne pense pas me tromper...
Dans ton code cote serveur, tu acceptes la connexion cliente, tu crees un nouveau thread auquel tu passe la connexion; a partir de la, le thread vit sa vie, mais le serveur aussi. Et la c'est le drame, tu fermes la connexion cote serveur.
Resultat, meme si ton thread a un objet clientSocket valide, la connexion sous-jacente a ete fermee par le serveur...
Resultat, retire la ligne "clientSocket.close();" de ton code serveur et laisse la gestion de cette action au thread vu que tu lui delegue justement la gestion de la connexion.
Si ton applis doit gerer un grand nombre de connexion, n'hesite pas a faire appel a un pool de thread plutot que d'en creer un nouveau a chaque fois et eventuellement crees un thread special pour 'nettoyer' les connexions en fin de vie (en gros qui se charge de fermer les sockets)
Je ne pense pas t'avoir induit en erreur, mais si c'est le cas, desole
Marsh Posté le 04-03-2005 à 19:29:20
Il faut que tu ferme le socket uniquement apres avoir fini l'envoi de données demandées par la requete.
Marsh Posté le 01-03-2005 à 23:49:44
Bonsoir,
j'ai un petit soucis avec une exception dans l'implémentation d'un serveur.Voici le code:
- le serveur
while(true){
clientSocket = serverSocket.accept();
System.out.println("Connexion de "+ clientSocket.getInetAddress().getHostName());
// Création du thread
(new HttpRequest(clientSocket)).start();
clientSocket.close();
}
- le thread
public class HttpRequest extends Thread{
private Socket connexion = null;
public HttpRequest(Socket clientSocket){
System.out.println("Entrée dans Thread\n" );
this.connexion = clientSocket;
}
public void run(){
String input = null;
BufferedReader in = null;
PrintWriter out = null;
try{
in = new BufferedReader(
new InputStreamReader(connexion.getInputStream()));
out = new PrintWriter(connexion.getOutputStream(),true);
}
catch (IOException e) {
System.out.println("Erreur flux Input et Output du socket: " + e);
}
................
et l'erreur à la suite de l'initialisation des variables in et ou
Erreur flux Input et Output du socket: java.net.SocketException: Socket is closed
java.lang.NullPointerException
at HttpRequest.run(HttpRequest.java:46)
Je ne comprend pas pourquoi il me sort cette exception.
Si qq1 voit l'erreur
thx
SHiSo