【发布时间】:2017-03-04 23:55:29
【问题描述】:
我正在尝试编写简单的服务器-客户端聊天解决方案。出于测试目的,我创建了一个包含 2 个 serverThreads 的数组,它们负责从连接的客户端发送和接收消息。
我希望服务器在连接的客户端数量达到最大值后拒绝连接。但是,即使服务器不接受连接,也会创建客户端的套接字。 socket.isBound 和 isConnected 方法都返回真值。
回到主要问题。 当 ServerSocket 无法 .accept() 附加连接时,您有什么想法如何拒绝客户端连接?
这是 Server 类的代码。
public class Server {
private ServerSocket serverSocket = null;
private ServerThread serverThread[] = new ServerThread[2];
protected volatile int clientCount = 0;
public Server (int port){
try {
System.out.println("Binding to port " + port + " ...");
serverSocket = new ServerSocket (port);
System.out.println("Binded to port " + port + ".");
} catch (IOException e) {
System.out.println("Failed binding to the port: " + e.getMessage());
}
}
public void addThread (Socket socket){
System.out.println ("Client connected at socket: " + socket);
serverThread[clientCount] = new ServerThread (this, socket);
try {
serverThread[clientCount].open();
serverThread[clientCount].start();
} catch (IOException e) {e.getMessage();}
}
public void waitForClient () {
boolean isLogPrinted = false;
while (true){
try {
if (clientCount < serverThread.length){
System.out.println ("Waiting for connection...");
isLogPrinted = false;
addThread (serverSocket.accept());
clientCount++;
System.out.println("Client count: " + clientCount);
}
else {
if (!isLogPrinted){
System.out.println("MAXIMUM NUMBER OF CLIENTS REACHED! (" + clientCount + ").");
isLogPrinted = true;
}
}
} catch (IOException e) {
System.out.println("Error while waiting for new clients to connect: " + e.getMessage());
}
}
}
public synchronized void broadcastMessages (String msg){
for (int i = 0; i < clientCount; i++)
serverThread[i].sendMessage(msg);
}
public static void main (String args[]){
Server server = new Server (4200);
server.waitForClient();
}
}
【问题讨论】:
-
除非您向客户展示您的代码,否则您的问题将很难或无法回答。
-
@PresidentJamesMoveonPolk 显然不是。您只需要一个连接客户端。它不需要做任何其他事情。 Telnet 可以。
-
您的标题与您的问题不符。请澄清。
标签: java multithreading sockets server client-server