2016-01-20 103 views
-2

我想创建一个具有多个客户端的服务器,但我不确定如何执行此操作。我只知道如何与一个客户做到这一点。我在谷歌上查了一些教程,但我不明白为什么有用,所以每个人都可以解释他们的答案?非常感谢你们! :D具有多个客户端的Java服务器

回答

0

为了处理多个客户端,您需要将通信委托给不同的线程。举一个真实的例子,在与其他人交谈时,不能接电话。一个人需要接听电话,而另一个人则需要接听这些电话。

有关如何使用java服务器处理多个客户端的一个非常基本的示例,可以在此link找到,更具体地在KKMultiServer和KKMultiServerThread类中。正如您所看到的,KKMultiServer的主线程每次接受连接时都会生成一个新线程,并且实际的通信将在新生成的线程中处理。

可以想象每次客户端连接时创建新线程的缺点,因此在现实生活中,资源经常被重用在线程池中。

你可以避开这种需要通过使用非阻塞io (NIO)将工作委派给新线程,但是对于第一次服务器实现,我建议使用阻塞IO来降低复杂性。

+0

谢谢!然而,我想知道为什么它不会在while(true)循环的每一次重复中产生一个新线程。对此有何评论? –

+0

你能改说你的问题吗?什么不会产生一个新的线程?链接中的代码?或者你在代码中说你没有看到一个新的线程正在产生? – nook

+0

没关系,我现在完全了解它...感谢您的回答,反正!我想知道是否每次执行while(true)循环时都会创建一个新线程。代码确实有用,所以谢谢! :d –

0

如果你有一个服务器到客户端的连接建立,其余的很简单。让服务器套接字监听程序不断循环,以便一旦建立连接,就可以在新线程上运行程序,从而不断查找新连接。如果你一直在寻找的教程我建议您查看文档,在这里有一个很好的例子:

https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

滚动至最底部,你会看到如何创建一个服务器,它可以很好的例子处理多个连接

+0

谢谢!所以,我会尝试在while(true)循环中使用此代码? [链接](http://pastebin.com/NeR6KcV1) –

+0

我有一个问题:如果客户端已经在客户端数组中,这个工作吗?如果它已经在那里,但是你再次调用accept()呢? D: –