Piszę prosty komunikator TCP w javie. Serwer jest wielowątkowy. Każdy klient łączy się z serwerem a ten tworzy dla niego nowy wątek i otwiera strumienie we/wy. Chciałbym aby klient1 wysyłał obiekt z wiadomością do serwera, ten odczytuje pole ip odbiorcy i przesyła do klienta2. Problem polega na komunikacji między dwoma osobnymi wątkami serwera reprezentującymi odpowiednie połączenia z klientem. (Klient1 <--> wątek Serw1 <--> watek Serw2 <-->klient2.
Może zna ktoś jakiś inny sposób komunikacji między dwoma klientami poprzez serwer wielowątkowy?
Kod serwera
import java.net.*;
import java.io.*;
public class Serwer
{
public static void main(String[] args)
{
ServerSocket serverSocket = null;
boolean listening = true;
try
{
serverSocket = new ServerSocket(4444);
while (listening)
new ServerThread(serverSocket.accept()).start();
serverSocket.close();
}
catch (IOException e)
{
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
}
}
Wątek serwera:
import java.net.*;
import java.io.*;
public class ServerThread extends Thread
{
private Socket socket = null;
private Wiadomosc wiad;
private ObjectInputStream in=null;
public ServerThread(Socket socket)
{
super("ServerThread");
this.socket = socket;
}
public void run()
{
try
{
in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
String inputLine, outputLine;
while ((wiad =(Wiadomosc)in.readObject()) != null)
{
if (wiad.tresc.equals("Bye"))
break;
System.out.println ("Wiadomosc: ID= "+wiad.id+" Tresc= "+wiad.tresc);
}
in.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch(ClassNotFoundException z)
{
System.out.println("Nie znaleziono klasy");
}
}
}