Witam. Przeszukałem forum i nadal nie mogę rozwiązać swojego (nie znalazłem odpowiedzi) problemu. Otóż mam komunikator (klient i serwer). Do serwera łączy się nieograniczona liczba użytkowników i to co dany z nich napisze, automatycznie trafia (poprzez serwer) do każdego podłączonego w danej chwili klienta (metoda broadcast_message(String message)). Stworzyłem HashMap, która przechowuje identyfikator (w tym wypadku na razie nick) oraz klasę odpowiedzialną za komunikację (ServerReadingStreamClass). Czytałem również, że trzeba podzielić wiadomość od klienta splitem, na formę od_kogo do_kogo wiadomość. Co też uczyniłem. Jednak nie wiem nadal jak przesłać coś od jednego klienta do drugiego [???] . Pozdrawiam
class ServerReadingStreamsThreadClass implements Runnable{
private Socket nowe_gniazdo;
private DataInputStream dane_wej;
private DataOutputStream dane_wyj;
private JTextArea okno_danych;
public static ArrayList<DataOutputStream> clients_out_streams = new ArrayList<DataOutputStream>();
private HashMap<String, ServerReadingStreamsThreadClass> mapa = new HashMap<String, ServerReadingStreamsThreadClass>();
ServerReadingStreamsThreadClass(Socket nowe_gniazdo, JTextArea okno_danych){
this.nowe_gniazdo = nowe_gniazdo;
this.okno_danych = okno_danych;
}
public void broadcast_message(String message){
Iterator<DataOutputStream> ilu_klientow = clients_out_streams.iterator();
while(ilu_klientow.hasNext()){
try{
DataOutputStream dos = ilu_klientow.next();
dos.writeUTF(message);
dos.flush();
}catch (IOException e) {
e.getMessage();
}
}
}
public String msg_from(String message){
String from = null;
String []array = message.split(" ");
from = array[0];
return from;
}
public void run() {
String message;
try{
dane_wej = new DataInputStream(nowe_gniazdo.getInputStream());
dane_wyj = new DataOutputStream(nowe_gniazdo.getOutputStream());
clients_out_streams.add(dane_wyj);
}catch (IOException e) {
e.getMessage();
}
while(true){
try{
while((message = dane_wej.readUTF())!=null){
okno_danych.append("\n"+message);
mapa.put(msg_from(message), this);
broadcast_message(message);
}
}catch (IOException e) {
e.getMessage();
}
}
}
}
A to jest klasa ServerCommunicationClass:
class ServerCommunicationClass {
private static ServerSocket server_socket;
private static DataOutputStream out_data;
public static void nowy_server_service(int port,JTextArea receive_field){
try{
server_socket = new ServerSocket(port);
receive_field.append("Serwer jest uruchomiony...");
}catch (IOException e) {
e.getMessage();
}
while(true){
ServerReadingStreamsThreadClass serv_thr_class;
try{
serv_thr_class = new ServerReadingStreamsThreadClass(server_socket.accept(),receive_field);
Thread server_thread = new Thread(serv_thr_class);
server_thread.start();
}catch (IOException e) {
e.getMessage();
}
}
}
}