В рамках задания, которое я выполняю, мы создаем простое приложение для чата в java с использованием сокетов. Все сообщения отправляются / принимаются в консоли.
Вот часть, на которой я застрял.
Требования. (Pi c)
Итак, что будет лучшим способом для go об этом? У меня есть возможность для нескольких клиентов подключиться к серверу и отправить ему сообщение, но когда я отправляю сообщение с сервера, не все клиенты получают его. Кроме того, как я могу различить guish, какой клиент отправил какое сообщение, чтобы не ретранслировать его обратно? Вот мой код.
Клиент. java
while (canConnect = true) {
Socket socket = new Socket("localhost", 8080);
DataInputStream din = new DataInputStream(socket.getInputStream());
DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputMsg = "";
String outputMsg = "";
while (!inputMsg.equals("quit")) {
outputMsg = br.readLine();
dout.writeUTF(userName + ": " +outputMsg);
inputMsg = din.readUTF();
System.out.printf(inputMsg);
}
socket.close();
// client dies here
}
Сервер. java
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
int clientNum = 0; // keeps track of how many clients were created
try {
serverSocket = new ServerSocket(8080); //New serverSocket on port 8080
System.out.println(serverSocket);
} catch (IOException e) {
System.out.println("Could not listen on port: 8080");
System.exit(-1);
}
while (true) {
Socket clientSocket = null;
try {
System.out.println("Waiting for client " + (clientNum + 1)
+ " to connect!");
clientSocket = serverSocket.accept();
System.out.println("Server got connected to a client"
+ ++clientNum);
Thread t = new Thread(new ClientHandler(clientSocket, clientNum));
t.start();
} catch (IOException e) {
System.out.println("Accept failed: 8080");
System.exit(-1);
}
} // end while loop
} // end of main method
}
class ClientHandler implements Runnable {
Socket s; // this is socket on the server side that connects to the CLIENT
int num; // keeps track of its number just for identifying purposes
ClientHandler(Socket s, int n) {
this.s = s;
num = n;
}
public void run() {
try {
DataInputStream din = new DataInputStream(s.getInputStream());
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputMsg = "";
String outputMsg = "";
while(!inputMsg.equals("quit")){
inputMsg = din.readUTF();
System.out.println(inputMsg);
outputMsg = br.readLine();
dout.writeUTF("Server: " + outputMsg);
dout.flush();
}
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}