OVH Cloud OVH Cloud

chat: problème d'envoi de messages

3 réponses
Avatar
wanderin
Bonjour,

j'ai un problème avec mon programme de chat.

D'abord du côté serveur. La connexion s'ouvre bien,
puisque je parviens à me connecté via telnet, et à lui envoyer
des messages. Le problème, c'est qu'il affiche le message "null"
dès qu'un client se déconnecte.

Du côté client. Donc non telnet, mais le programme client. Il se connecte
bien au serveur (puique celui-ci reçoit ses données correspondantes
à la structure de la socket de connexion). Pourtant, dès qu'il doit
envoyer un message, j'obtiens 2 messages d'erreurs, causant l'arrêt
du client et du serveur:
1. un message du côté serveur:
java.net.SocketException: Software caused connection abort: recv failed
2. un message du côté client:
java.net.SocketException: Socket is closed


Merci pour votre aide. :-)

3 réponses

Avatar
Vincent Cantin
D'ou provient ton programme, c'est toi qui l'a programme ?

On ne peut pas deviner d'ou provient le probleme sans plus d'information.

Je te recommande de reduire ton programme a un programme plus petit, centre
autour du probleme, et de voir ensuite ce qui ne va pas ... voir a poster le
source ici, *si vraiment* tu ne peux pas trouver le probleme par toi-meme.
Mais limite la taille de ce que tu posteras a des petits listing.

Vincent
Avatar
wanderin
D'ou provient ton programme, c'est toi qui l'a programme ?


oui, en lisant pas mal la doc évidemment. La programmation
d'un dialogue client serveur ne s'invente pas, il y a des règles
auxquelles on ne peut se soustraire.

On ne peut pas deviner d'ou provient le probleme sans plus d'information.

Je te recommande de reduire ton programme a un programme plus petit,
centre

autour du probleme, et de voir ensuite ce qui ne va pas ... voir a
poster le

source ici, *si vraiment* tu ne peux pas trouver le probleme par
toi-meme.

Mais limite la taille de ce que tu posteras a des petits listing.


Je réussis à envoyer des donner, mais il y une mauvaise gestion
des envois. Voici un exemple de code générant des erreurs:

try{
/*
* string 1: rien affiché du côté serveur
* string 2: 2 s'affiche côté serveur
* 1 est affiché du côté client
*
*/

System.out.println("donnez votre pseudo");

BufferedReader login = new BufferedReader(new
InputStreamReader(System.in));
String pseudo = login.readLine();
send.write("mon pseudo: " + pseudo + "rn");
send.flush();
}

catch(Exception log){
System.err.println("erreur de login:" + log);
}


Avec ça, le premier message en entrée n'affiche rien du côté serveur.
En tapant un second message, le message "mon pseudo" s'affiche du côté
client, avec pour valeur le premier message envoyé (???).
Du même coup, le second message s'affiche du côté serveur (???).
Pourtant, un write via ma socket("send", qui correspond à un PrintWriter),
devrait envoyer ma donnée complète ("mon pseudo toto") vers mon serveur...

Là, je suis paumé :-(

Merci

Vincent




Avatar
Kupee
wanderin wrote:
D'ou provient ton programme, c'est toi qui l'a programme ?


oui, en lisant pas mal la doc évidemment. La programmation
d'un dialogue client serveur ne s'invente pas, il y a des règles
auxquelles on ne peut se soustraire.

On ne peut pas deviner d'ou provient le probleme sans plus
d'information.


Je te recommande de reduire ton programme a un programme plus petit,
centre

autour du probleme, et de voir ensuite ce qui ne va pas ... voir a
poster le

source ici, *si vraiment* tu ne peux pas trouver le probleme par
toi-meme.

Mais limite la taille de ce que tu posteras a des petits listing.


Je réussis à envoyer des donner, mais il y une mauvaise gestion
des envois. Voici un exemple de code générant des erreurs:

try{
/*
* string 1: rien affiché du côté serveur
* string 2: 2 s'affiche côté serveur
* 1 est affiché du côté client
*
*/

System.out.println("donnez votre pseudo");

BufferedReader login = new BufferedReader(new
InputStreamReader(System.in));
String pseudo = login.readLine();
send.write("mon pseudo: " + pseudo + "rn");
send.flush();
}

catch(Exception log){
System.err.println("erreur de login:" + log);
}


Avec ça, le premier message en entrée n'affiche rien du côté serveur.
En tapant un second message, le message "mon pseudo" s'affiche du côté
client, avec pour valeur le premier message envoyé (???).
Du même coup, le second message s'affiche du côté serveur (???).
Pourtant, un write via ma socket("send", qui correspond à un PrintWriter),
devrait envoyer ma donnée complète ("mon pseudo toto") vers mon serveur...

Là, je suis paumé :-(


Quand tu fais readLine() s'il retourne null c'est que le client est
déconnecté tout simplement, il faut donc le gérer