Связь между двумя клиентами и одним сервером в javafx
я часто пытаюсь общаться между двумя клиентами (ClientA. Сервер. ClientB)
Если ClientA отправляет сообщение, оно отправляется на сервер, а затем сервер отправляет его обратно в ClientA вместо отправки этого сообщения в ClientB. то же самое с ClientB оба клиента не могут общаться друг с другом, но могут подключаться к серверу.
Что я уже пробовал:
серверный код
public class MultiUserChatServer { static List clientList; /** * @param args the command line arguments */ public static void main(String[] args) { clientList = new ArrayList(); System.out.println("Server Started\nWaiting For Client Connection"); try { ServerSocket serSock = new ServerSocket(2018); while (true) { Socket sock = serSock.accept(); ServerThread s = new ServerThread(sock); s.start(); clientList.add(s); } } catch (Exception e) { e.printStackTrace(); } } private static class ServerThread extends Thread { private final Socket sock; private DataInputStream dataIn; private DataOutputStream dataOut; public ServerThread(Socket sock) { this.sock = sock; } @Override public void run() { try { dataIn = new DataInputStream(sock.getInputStream()); dataOut = new DataOutputStream(sock.getOutputStream()); String line; while (sock.isConnected()) { line = dataIn.readUTF(); for (int i = 0; i < MultiUserChatServer.clientList.size(); i++) { dataOut.writeUTF(line); dataOut.flush(); } } } catch (Exception e) { e.printStackTrace(); } } } }
Клиентский Код (Класс Контроллера)
public class FXMLDocumentController implements Initializable { @FXML private Label label; @FXML private JFXTextArea textArea; @FXML private JFXTextField textField; private Socket sock; private DataInputStream dataIn; private DataOutputStream dataOut; @FXML private void sendAction(ActionEvent event) { try { dataOut.writeUTF(textField.getText()); textArea.appendText("You: " + textField.getText() + "\n"); dataOut.flush(); textField.clear(); } catch (Exception e) {e.printStackTrace(); } } @Override public void initialize(URL url, ResourceBundle rb) { new ClientThread().start(); label.setText("Connected"); } private class ClientThread extends Thread { @Override public void run() { try { sock = new Socket(InetAddress.getLocalHost(), 2018); dataOut = new DataOutputStream(sock.getOutputStream()); dataIn = new DataInputStream(sock.getInputStream()); while (true) { textArea.appendText(dataIn.readUTF() + "\n"); } } catch (Exception e) { e.printStackTrace(); } } } }
Что я здесь делаю не так?