【发布时间】:2015-02-06 14:14:31
【问题描述】:
我是 java 新手,尤其是 java 网络新手,但我想做的是设置一个服务器(用于游戏)。当两个客户端连接到服务器时,我想拒绝任何其他连接。我可以关闭 ServerSocket 吗?如果 ServerSocked 关闭,那两个作为线程运行并存储在集合中的连接仍然存在并且能够与服务器通信?我希望你明白我的意思。
这里是源代码:
//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。运行您的测试客户端的三个实例,如果(在服务器输出流中)您看到“连接太多”消息,然后是其他两个客户端的输出,那么它可以按您的意愿工作。
-
谢谢@PaulMedcraft,我会试试的。
标签: java network-programming serversocket