Java 多线程服务器/客户端聊天

Java 多线程服务器/客户端聊天,java,multithreading,sockets,client,server,Java,Multithreading,Sockets,Client,Server,这是我在这里的第一篇文章,我目前正在尝试使用套接字编程制作一个Java客户机/服务器聊天应用程序 我当前让服务器等待客户端连接,然后将客户端的消息传递回客户端。到目前为止,我已经尝试了不同的方法,让服务器不断地监听新的客户端,并将它们连接起来,从而允许它们彼此发布和查看消息 你能给我指出正确的方向,以及我应该如何实施这一点吗 服务器 } 客户 }您可以使用whiletrue{}或whilesocket=serverSocket.accept!=服务器无限期循环的值为null 要使服务器能够连接到

这是我在这里的第一篇文章,我目前正在尝试使用套接字编程制作一个Java客户机/服务器聊天应用程序

我当前让服务器等待客户端连接,然后将客户端的消息传递回客户端。到目前为止,我已经尝试了不同的方法,让服务器不断地监听新的客户端,并将它们连接起来,从而允许它们彼此发布和查看消息

你能给我指出正确的方向,以及我应该如何实施这一点吗

服务器 }

客户
}

您可以使用whiletrue{}或whilesocket=serverSocket.accept!=服务器无限期循环的值为null

要使服务器能够连接到多个客户端,您可以创建一个接受新连接的循环:

while (true) {
    try {
        Socket connectionSocket = serverSocket.accept();
        ...
    } 
    ...
}
为了保持它的响应性,您可以在一个新线程中与每个客户机协作,或者维护一个线程池,并为每个新连接向它提交一个任务。

下面是一个示例,说明如何做到这一点。ServerSocketEx扩展了ServerSocket,但这只是为了方便使用;super.accept后面的所有代码都与您的问题相关

正如其他人所建议的,您应该在一个循环中调用accept,由try{}catch IOException…包围。。。;因此,如果选择关闭ServerSocket,则可以关闭

public Socket accept() throws IOException {
    Socket s = super.accept();
    if (getSocketRunnerFactory() != null) {
        SocketRunner runner = getSocketRunnerFactory().createSocketRunner(s);
        if (executor != null) {
            Future f = 
                executor.submit(runner);
            if (futures != null) futures.add(f);
        }
        else {
            Thread t = new Thread(runner);
            t.start();
        }
    }
    return s;
}
while (true) {
    try {
        Socket connectionSocket = serverSocket.accept();
        ...
    } 
    ...
}
public Socket accept() throws IOException {
    Socket s = super.accept();
    if (getSocketRunnerFactory() != null) {
        SocketRunner runner = getSocketRunnerFactory().createSocketRunner(s);
        if (executor != null) {
            Future f = 
                executor.submit(runner);
            if (futures != null) futures.add(f);
        }
        else {
            Thread t = new Thread(runner);
            t.start();
        }
    }
    return s;
}