我是新来的java和尤其是java网络,但我想要做的是建立一个服务器(游戏)。当两个客户端连接到服务器时,我想拒绝任何其他连接。我能关闭ServerSocket吗?如果ServerSocked已关闭,那么已经作为线程运行并存储在集合中的那两个连接仍然活着,并且能够与服务器通信?我希望你明白我的观点。Java有限连接到服务器
这里的源代码:
//Server
public synchronized List<ClientThread> getClients(){
return clients;
}
public void run() {
try {
while(true){
Socket clsock = srvsock.accept();
if(getClients().size() == 2){
System.out.println("Too many connections!");
clsock.close();
continue;
}
ClientThread clt = new ClientThread(clsock);
clients.add(clt);
clt.start();
System.out.println("Connection accepted.");
}
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
}
有了这个代码,我不能在客户机上检测是否连接还活着,或者服务器已关闭了连接。提前致谢。
我认为它会按照您描述的方式工作,但是您是否测试了它?让您的ClientThread使用BufferedReader从套接字的输入流中读取数据,并在读取每行时输出。然后编写一个测试客户端,用每行之间的Thread.sleep逐行写入输出流。运行测试客户端的三个实例,并且如果(在服务器输出流中)看到“其他两个客户端的输出”消息后显示“太多连接”消息,则表明它正在按照您的要求工作。 – 2015-02-06 14:38:44
谢谢@PaulMedcraft,我会试试看。 – marthin23 2015-02-06 14:48:20