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