Simple Chat using socket connection

大憨熊 提交于 2019-12-12 06:47:10

问题


I am trying to make a simple chat. I have a server that handles more clients. This is what i did until now : the connections , i can identify on my server which client is sending the message , but the problem is that on client i can't get full conversation like on the server .For example

Client_1  (writing)
msg : hi

Client_2 (writing)
msg : hi from cl2

results 

Server :
Client_1 : hi
Client_2 : hi from cl2

Client_1 
Client_1 : hi

Client_2 
Client_2 :hi from cl2

I want to achieve that both clients have the same info as server has.

My Server Script :
public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(1900);
        System.out.println("waiting");
        while (true) {
            Socket sock = server.accept();
            System.out.println("Client nou conectat !");
            ClientHandler cH = new ClientHandler(sock);
            cH.start();
        }
    }
}

class ClientHandler extends Thread {
    BufferedReader in;
    PrintWriter out;

    ClientHandler(Socket sock) throws IOException {
        out = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()),
                true);
        in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    }

    public void run () {
            try {
                out.println("Hello from server"); //hello message to client
        while (true) {
            String linie = in.readLine();
            if (linie==null)
                return;
            System.out.println(linie); //message from client 
            out.println(linie);
        }
    }catch(Exception e) {e.printStackTrace();}
        }
}

Client script

public class Client {
    public static void main(String[] args) throws Exception {
    //  String ip ="192.168.1.12";
        String ip ="localhost";
        Socket sock = new Socket(ip, 1900); // localhost daca ii pe
                                                        // acelasi pc serverul
                                                        // si clientul,altfel
                                                        // IPul
        PrintWriter out = new PrintWriter(new OutputStreamWriter(
                sock.getOutputStream()), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(
                sock.getInputStream()));
        String linie = in.readLine();
        System.out.println("Server :" + linie);//meesage from server
        BufferedReader console = new BufferedReader(new InputStreamReader(
                System.in));

        while (true) {
            linie = console.readLine();
            out.println("Client_1 :"+linie); // sending to server
            String linie2 =in.readLine();
            System.out.println(linie2); //resend message to client
        }
    }
}

I hope i explained well my problem :D . Thanks in advice for all


回答1:


On your server side.

You create a ClientHandler for each client connection to the server, this is Ok, then reading what comes from each ClientHandler.

But each ClientHandler is agnostic to how many other clients are on the server, you have to "connect them".

I would create a

public class ClientDispatcher{

    private List<ClientHandler> clients;

}

and notify that ClientDispatcher for every message a ClientHandler has so he can "dispatch" the message to the others.



来源:https://stackoverflow.com/questions/19378748/simple-chat-using-socket-connection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!