Проблема клиент-серверной программы чата на сервере - PullRequest
0 голосов
/ 09 декабря 2018

Я делаю проект чата с клиент-сервером.где клиент A и клиент B должны быть подключены к серверу.Я могу подключить клиента A к серверу, но проблема возникла в клиенте B. Я хочу подключить клиента A и клиента B к серверу.Клиент А успешно подключен.А также я хочу общаться с Клиентом А и Клиентом Б. Но я не смог, если кто-нибудь мне поможет, я действительно буду признателен.Спасибо

    String msgin = "";
try{
    ss= new ServerSocket(5000);
    s= ss.accept();
    din= new DataInputStream(s.getInputStream());
    dout= new DataOutputStream(s.getOutputStream());
    while(!msgin.equals("exit")) {
        msgin = din.readUTF();
        msg_area.setText(msg_area.getText().trim()+"\n Client A:\t"+msgin);
           }
}catch(IOException e){

}
String msgIn = "";
try{
    ss= new ServerSocket(6000);
    s= ss.accept();

    din= new DataInputStream(s.getInputStream());
    dout= new DataOutputStream(s.getOutputStream());
    while(!msgIn.equals("exit")) {
        msgIn = din.readUTF();
        msg_area.setText(msg_area.getText().trim()+"\n Clint B:\t"+msgIn);
           }
}catch(Exception e){

}

клиент A

java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MyClientSocket().setVisible(true);
        }
    });
     try{
        s = new Socket("127.0.0.1",5000);
        din = new DataInputStream(s.getInputStream());
        dout = new DataOutputStream(s.getOutputStream());
        String msgin="";
        while(!msgin.equals("exit")){
        msgin = din.readUTF();
        msg_area.setText(msg_area.getText().trim()+"\n Server:\t"+msgin);

        }

    }catch(Exception e){

}

клиент B

java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MyClientServerB().setVisible(true);
        }
    });

    try{
        s = new Socket("127.0.0.1",6000);

        din = new DataInputStream(s.getInputStream());
        dout = new DataOutputStream(s.getOutputStream());
        String msgIn="";
        while(!msgIn.equals("exit")){
        msgIn = din.readUTF();
        msg_area.setText(msg_area.getText().trim()+"\n Server:\t"+msgIn);

        }

    }catch(Exception e){

}

1 Ответ

0 голосов
/ 10 декабря 2018

Чтобы разрешить нескольким клиентам одновременно подключаться к серверу, вам необходимо использовать многопоточность.Попробуйте создать новый поток для каждого клиента, который подключается.Серверы являются долго выполняющимися программами, поэтому они должны постоянно прослушивать новые клиентские соединения, зацикливаясь.

Вот логика, которую вы можете попробовать:

try {
        serverSocket = new ServerSocket(8080);
    } catch (IOException io) {
        io.printStackTrace();
}

while (true) {

        Socket clientSocket;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException io) {
            io.printStackTrace();
        }

        Thread t = new Thread(new Runnable() {
             // handle each client independently 
        }
        t.start();

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...