服务器赢得';t连接到多个客户端(Java)

服务器赢得';t连接到多个客户端(Java),java,multithreading,chat,Java,Multithreading,Chat,我的服务器类 import java.net.*; import java.io.*; public class server { private Socket socket; private ServerSocket server; // constructor with port public void start(int port){ try { server = new ServerSocket(port);

我的服务器类

import java.net.*;
import java.io.*;

public class server
{
   private Socket socket;
   private ServerSocket server;
    // constructor with port
   public void start(int port){
       try {
           server = new ServerSocket(port);
           while(true){
               socket = server.accept();
                   new ConnectionHandler(socket).run();

           }
       }catch(IOException i){

       }
   }
}

class ConnectionHandler implements  Runnable{
    private Socket       socket = null;
    private ServerSocket server = null;
    private DataInputStream in   = null;
    public ConnectionHandler(Socket socket){
        this.socket=socket;
    }
    @Override
    public void run() {
        InputStream inp = null;
        BufferedReader brinp = null;
        DataOutputStream out = null;
        try
        {
            System.out.println("Waiting for a client ...");
            System.out.println(server);
            System.out.println("Client accepted");
            in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

            String line = "";

            // reads message from client until "Over" is sent
            while (!line.equals("Over"))
            {
                try
                {
                    line = in.readUTF();
                    System.out.println(line);

                }
                catch(IOException i)
                {
                    System.out.println(i);
                }
            }
            System.out.println("Closing connection");

            // close connection
            socket.close();
            in.close();
        }
        catch(IOException i)
        {
            System.out.println(i);
        }
    }

    public static void main(String[] args) {
        server serverr = new server();
        serverr.start(4000);
    }
    }
这是我的客户端类

import java.net.*;
import java.io.*;

public class Client
{
    // initialize socket and input output streams
    private Socket socket        = null;
    private DataInputStream input = null;
    private DataOutputStream out     = null;

    // constructor to put ip address and port
    public Client(String address, int port)
    {
        // establish a connection
        try
        {
            socket = new Socket(address, port);
            System.out.println("Connected");

            // takes input from terminal
            input = new DataInputStream(System.in);

            // sends output to the socket
            out = new DataOutputStream(socket.getOutputStream());
        }
        catch(UnknownHostException u)
        {
            System.out.println(u);
        }
        catch(IOException i)
        {
            System.out.println(i);
        }

        // string to read message from input
        String line = "";

        // keep reading until "Over" is input
        while (!line.equals("Over"))
        {
            try
            {
                line = input.readLine();
                out.writeUTF(line);
            }
            catch(IOException i)
            {
                System.out.println(i);
            }
        }

        // close the connection
        try
        {
            input.close();
            out.close();
            socket.close();
        }
        catch(IOException i)
        {
            System.out.println(i);
        }
    }

    public static void main(String args[])
    {
        Client client = new Client("127.0.0.1", 4000);
    }
}
试图通过终端开发非常简单的聊天应用程序是可行的,但我认为我的代码中有很多bug。 服务器可以处理一个客户机,但当另一个客户机出现时,它不会连接到其他客户机。 我现在该怎么办? 我找不到我的问题在哪里,等待你的帮助。
注意:我对套接字编程概念完全陌生。

ConnectionHandler类是一个线程类,您必须将其对象包装到
线程
实例,然后调用
start()
,而不是
run()

因此,在服务器类中进行了更改

new ConnectionHandler(socket).run();


我想您的目的是在一个单独的线程中处理每个客户机。但你不能那样做。只需调用run(),而不是启动线程。“new ConnectionHandler(socket).run();”不是启动新线程吗?不是,它只是运行代码。使用
新线程(新连接处理程序(套接字)).start()
@ShooterLensAim请单击我发布的链接。我发布它是有原因的。非常感谢各位大师!“新线程(新连接处理程序(套接字)).start();”解决了我的问题。新线程(新连接处理程序(套接字)).start();解决了问题,谢谢。
new Thread(ConnectionHandler(socket)).start();