problème de flux avec socket
Ca devrait fonctionner comme ca ;)
Fais attention à où tu ouvre un writer et où tu le ferme et je te conseille de lire la doc pour comprendre les méthodes comme readLine.
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
| public void run() {
try{
soc = ser.accept();
jta.append("["+new Date(DateFormat.LONG)+"]>Connection acceptée via le port--> "+soc.getPort()+"\r\n");
jta.append("["+new Date(DateFormat.LONG)+"]>Le client "+nbrclient+" : "+InetAddress.getLocalHost().getHostAddress()+" est connecté\n\n");
jta.setCaretPosition(jta.getText().length());
jScrollPane1.validate();
out = new PrintWriter(soc.getOutputStream());
out.println("-Bonjour > "+InetAddress.getLocalHost().getHostAddress()+"\nVous êtes connecté\n");
out.flush();
in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
while ((line = in.readLine()) != null) //readLine() lit une ligne et se déplace sur la suivante!!
{
//line = in.readLine();//donc jusque ici t'a deux lignes lues du coup
//c'est pour ca que tu a dit que tu ne peux envoyer que 2 messages
out.println("-Message reçu\n");
out.flush();
jta.append(line+"\n");
jta.setCaretPosition(jta.getText().length());
jScrollPane1.validate();
if(line.equals("exit"))
{//debut if
try
{
out.println("Au revoir "+nbrclient+" "+InetAddress.getLocalHost().getHostAddress()+"\nvous êtes déconnecté");
out.flush();
soc.close();
jta.append("["+new Date(DateFormat.LONG)+"]>"+"SOCKET IS CLOSED >>> CONNECTION IS AVAILABLE\n\n");
jta.setCaretPosition(jta.getText().length());
jScrollPane1.validate();
out.close(); // tu dois fermer ici ton PrintWriter en recevant "exit", car tu dois etre dans le bloc du if!!
}
catch(IOException e) {}
}//fin if !!
// out.close();
//si tu ferme le PrintWriter ici dans la boucle while c'est normal tu ne peux
//plus rien écrire après car ligne sera null et tu sors de la while
}
//la while fini ici sa boucle car quand la ligne est null à la fin du stream on passe ici
// donc la boucle sera fini quand le PrintWriter est clos ok
}catch (Exception e) {} |