Hallo,
also ich hab nen problem und zwar möchte ich einen server der bis zu 5 connections an nimmt und über diese dann daten sendet und empfängt. ich hab nen Listener der über accept() die sockets einem neuen thread übergibt der dann die verbindung hält (also max 5 threads die mit den unterschiedlichen clients kommunizieren). der client sendet objekte an den server die der server in eine queue packt und dann nach und nach wird jede nachricht an jeden client über die jeweiligen threads gesendet. der listener ist nen eigener thread der damit nix am hut hat. ich hab diverse tutorials gelesen zu chat servern allerdings klppat es einfach nicht so wie ich es implementiert habe.....ich poste mal die wichtigen teile
Klasse Server enthält die Queue, ein ThreadArray[5] mit den aktiven Threads und die Broadcast Methode um über die threads die nachricht zu senden (out is der protected ObjectOutputStream)
serverthread sieht so aus
und das problem ist das ich die erste nachricht senden kann und die kommt auch sofort zurück, aber bei der zweiten antwortet der server nicht. ich kann mir nur vorstellen das es an der broadcast methode liegt, allerdings hab ich die aus nem chat toturial und die sollte laut tutorial so funktionieren. ich hoffe ich konnte das problem einigermaßen klar formulieren....
danke für eure hilfe
P.S. ich kann keine rmi verwenden da sockets die vorgabe sind
also ich hab nen problem und zwar möchte ich einen server der bis zu 5 connections an nimmt und über diese dann daten sendet und empfängt. ich hab nen Listener der über accept() die sockets einem neuen thread übergibt der dann die verbindung hält (also max 5 threads die mit den unterschiedlichen clients kommunizieren). der client sendet objekte an den server die der server in eine queue packt und dann nach und nach wird jede nachricht an jeden client über die jeweiligen threads gesendet. der listener ist nen eigener thread der damit nix am hut hat. ich hab diverse tutorials gelesen zu chat servern allerdings klppat es einfach nicht so wie ich es implementiert habe.....ich poste mal die wichtigen teile
Klasse Server enthält die Queue, ein ThreadArray[5] mit den aktiven Threads und die Broadcast Methode um über die threads die nachricht zu senden (out is der protected ObjectOutputStream)
Code:
public void broadcastMessage(){
while(!Queue.isEmpty()){
for(int i=0; i<serverthreads.length; i++){
try {
serverthreads[i].out.writeObject(getQueueElement());
} catch(IOException io){io.printStackTrace();}
}
}
}
serverthread sieht so aus
Code:
private Server server;
protected ObjectInputStream in; // Eingabestream
protected ObjectOutputStream out; // Ausgabestream
private Socket socket;
private boolean running = true;
/**
* Constructor init Thread for handling communication
* @param Socket socket defines the communication socket
*/
public ServerThread(Server server,Socket socket){
super("ServerThread");
this.socket=socket;
this.server=server;
try{
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
} catch (IOException io){io.printStackTrace();}
this.start();
System.out.println("ServerThread init & running....");
}
/**
* handle incoming requests from client
*/
public void run(){
try {
Message input;
while (running) {
if((input = (Message) in.readObject()) != null){
server.addQueueElement(input);
server.broadcastMessage();
}
}
finalize();
} catch (IOException io) {io.printStackTrace();}
catch (ClassNotFoundException cnf){cnf.printStackTrace();}
System.out.println("leaving run");
}
und das problem ist das ich die erste nachricht senden kann und die kommt auch sofort zurück, aber bei der zweiten antwortet der server nicht. ich kann mir nur vorstellen das es an der broadcast methode liegt, allerdings hab ich die aus nem chat toturial und die sollte laut tutorial so funktionieren. ich hoffe ich konnte das problem einigermaßen klar formulieren....
danke für eure hilfe
P.S. ich kann keine rmi verwenden da sockets die vorgabe sind