Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用套接字连接进行简单聊天_Java_Multithreading_Sockets_Chat - Fatal编程技术网

Java 使用套接字连接进行简单聊天

Java 使用套接字连接进行简单聊天,java,multithreading,sockets,chat,Java,Multithreading,Sockets,Chat,我正在试着做一个简单的聊天。我有一个可以处理更多客户端的服务器。这就是我到目前为止所做的:连接,我可以在我的服务器上识别哪个客户端正在发送消息,但问题是在客户端我无法像在服务器上那样获得完整的对话 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 C

我正在试着做一个简单的聊天。我有一个可以处理更多客户端的服务器。这就是我到目前为止所做的:连接,我可以在我的服务器上识别哪个客户端正在发送消息,但问题是在客户端我无法像在服务器上那样获得完整的对话

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
我想实现两个客户机拥有和服务器相同的信息

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();}
        }
}
客户端脚本

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
        }
    }
}
我希望我能很好地解释我的问题:D。感谢您在服务器端提供的所有建议

您可以为每个客户端到服务器的连接创建一个ClientHandler,这样就可以了,然后读取来自每个ClientHandler的内容

但是每个ClientHandler都不知道服务器上还有多少其他客户端,您必须“连接它们”

我会创造一个

public class ClientDispatcher{

    private List<ClientHandler> clients;

}
公共类ClientDispatcher{
私人名单客户;
}

并为ClientHandler收到的每封邮件通知ClientDispatcher,以便他可以将邮件“发送”给其他人。

您没有告诉我您从何处复制粘贴邮件?好吧,我有一个作业,要在发送邮件时识别每个客户机,并在客户机端获得与服务器端相同的输出我需要一些提示,如何从一个客户端获取信息到另一个客户端。。。