Moin Moin ich habe einen Server und dort gibt es einen Thread, der immer wenn von einem Client eine Nachricht kommt, diese an alle anderen senden.........
soweit so bevor der Quelltext kommt noch ein paar erläuterungen zu eben diesen...
falls ihr euch über die eingabe wundert, das soll das empfangen einer Nachricht darstellen, da momentan der Client noch nicht so ausgereift ist.... also alles was jetzt eintritt sobald was eingegeben wurde, soll später eintreten wenn der Client sendet....
Das ganze läuft aber noch nicht so richtig denn wenn ich mir die Exception in der senden Methode ausgeben lasse kommt da als Fehler:
java.net.SocketException: Socket is closed
und das nicht einmal sondern naja als ob ich es in einer while schleife ausgebe......... und das kommt nur, wenn ich das
out.close; da stehen habe ansonsten kommt der fehler nicht, aber beim Client auch nix an, da der nicht erkennt, dass die gesendete Zeile zu ende ist..
ich wunder mich, da out.close(); ja eigentlich den Outputstream schließen soll und nicht den socket....
außerdem wenn ich mir in der Exception mal statt der Exception "socket" ausgeben lasse, dann kommt der ganz normal also kein [unconected] oder ähnliches...
Außerdem, wenn ich einen Client habe funktioniert es ganz wunderbar, es funktioniert eigentlich auch bei mehreren Clients da kommt dann zwar die Exception aber er sendet ganz brav...
und mich wundert, dass ich erst beide eingaben machen muss (bei zwei clients) bevor der die senden methode aufruft....
eigentlich sollten die Threads doch nebeneinander ablaufen und wenn ich dann eine eingabe mache, müsste es doch in dem Thread weitergehen oder ?
ich hoffe ich mache euch nicht zu viel Arbeit und ihr wisst hilfe ich sitz da schon seit heute morgen dran
grazie in anticipo
soweit so bevor der Quelltext kommt noch ein paar erläuterungen zu eben diesen...
falls ihr euch über die eingabe wundert, das soll das empfangen einer Nachricht darstellen, da momentan der Client noch nicht so ausgereift ist.... also alles was jetzt eintritt sobald was eingegeben wurde, soll später eintreten wenn der Client sendet....
Das ganze läuft aber noch nicht so richtig denn wenn ich mir die Exception in der senden Methode ausgeben lasse kommt da als Fehler:
java.net.SocketException: Socket is closed
und das nicht einmal sondern naja als ob ich es in einer while schleife ausgebe......... und das kommt nur, wenn ich das
out.close; da stehen habe ansonsten kommt der fehler nicht, aber beim Client auch nix an, da der nicht erkennt, dass die gesendete Zeile zu ende ist..
ich wunder mich, da out.close(); ja eigentlich den Outputstream schließen soll und nicht den socket....
außerdem wenn ich mir in der Exception mal statt der Exception "socket" ausgeben lasse, dann kommt der ganz normal also kein [unconected] oder ähnliches...
Code:
/**
*
* Beschreibung
*
* @version 1.0 vom 14.10.2007
* @author
*/
import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class tRead implements Runnable
{
// Anfang Variablen
cList socket_list;
Socket socket;
BufferedReader in;
PrintWriter out;
String msg;
Scanner eingabe;
// Ende Variablen
// Anfang Ereignisprozeduren
public tRead(cList pList, Socket pSocket)
{
this.socket_list = pList;
this.socket = pSocket;
eingabe = new Scanner(System.in);
}
public void run()
{
try
{
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("gib was ein um zu senden");
msg = eingabe.next();
System.out.println("hast gut eingegeben");
//while (!in.ready()) {} //**********das soll nachher die eingabe ersetzen
senden();
} catch (IOException e)
{
}
}
public void senden()
{
socket_list.toFirst();
while(!socket_list.isBehind()) //**************hier sind alle sockets drin gespeichert....
{
try
{
socket = (java.net.Socket)socket_list.getItem();
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.write("hallo meine welt");
System.out.println(String.valueOf(socket_list.getItem())+" Message: "+msg);
socket_list.next();
out.close(); //*********ja hier scheint das problem zu sein aber ich muss den
//*********Stream ja schließen, damit readLine ein ende erkennt
} catch (IOException e)
{
System.out.println(e); //*********naja die Exception sagt das der socket "geclosed" ist
}
}
}
// Ende Ereignisprozeduren
}
Außerdem, wenn ich einen Client habe funktioniert es ganz wunderbar, es funktioniert eigentlich auch bei mehreren Clients da kommt dann zwar die Exception aber er sendet ganz brav...
und mich wundert, dass ich erst beide eingaben machen muss (bei zwei clients) bevor der die senden methode aufruft....
eigentlich sollten die Threads doch nebeneinander ablaufen und wenn ich dann eine eingabe mache, müsste es doch in dem Thread weitergehen oder ?
ich hoffe ich mache euch nicht zu viel Arbeit und ihr wisst hilfe ich sitz da schon seit heute morgen dran
grazie in anticipo