я знаю, этот вопрос был задан раньше, и я попробовал различные решения, но я застрял в части реализации .. :(сервер отправка сообщения всем подключенным клиентам
В настоящее время несколько клиентов могут подключаться к сервер, я использовал многопотоковый пример сервера/клиента KnockKnock из javadocs и немного отредактировал его, чтобы вы могли просто отправлять сообщения на сервер, и он будет отсылать их обратно вам, но я хочу, чтобы это можно было сделать так, чтобы если клиент 1 отправляет сообщение, то сервер будет передавать их обратно всем клиентам, подключенным к серверу.
Я попытался оглянуться и увидел людей в том же положении, на котором я сейчас, и им сказали сделать чтобы отслеживать все подключения, а затем перебирать список и отправлять сообщение, но я действительно не знаю, в каком классе его поставить или как его обрабатывать.
Если кто-то может показать мне или просто дать мне намеки, где я должен начать, это было бы весьма признателен, так как я на самом деле просто застрял в данный момент :(
Вот где я нахожусь до сих пор :
Сервер:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
public static void main(String[] args) throws IOException {
boolean listening = true;
try (ServerSocket serverSocket = new ServerSocket(4444)) {
while (listening) {
ServerThread thread = new ServerThread(serverSocket.accept());
thread.start();
}
} catch (IOException e) {
System.err.println("Could not listen on port ");
System.exit(-1);
}
}
}
ServerThread
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ServerThread extends Thread{
private Socket socket = null;
public ServerThread(Socket socket) {
super("MultiServerThread");
this.socket = socket;
}
public void run() {
try (
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
) {
while (true) {
String input = in.readLine();
System.out.println(input);
out.println("ecco " + input);
if (input.equals("Bye"))
break;
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client (не уверено, что в случае необходимости, но здесь это так или иначе)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws IOException {
try (
Socket kkSocket = new Socket("172.30.242.51", 4444);
PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(kkSocket.getInputStream()));
) {
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
if(in != null) {
String input = stdIn.readLine();
out.println("Client: " + input);
System.out.println(in.readLine());
out.flush();
}
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host ");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to ");
System.exit(1);
}
}
}
Хорошие выходные =)
Извините, но это выглядит очень запутанной для меня :( –