我有一个服务器套接字,我想将它打开给多个客户端。 但只获得 1,如果我关闭该客户端,我将无法获得更多客户端。
服务器代码:
public class Server {
public void startServer() {
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
InetAddress ip;
connect cn = new connect();
ServerSocket serverSocket = new ServerSocket(9239);
Socket clientSocket;
System.out.println("Waiting for clients to connect...");
clientSocket = serverSocket.accept();
String HostName = "";
String HostIp = "";
String PC = "";
clientProcessingPool.submit(new ClientTask(clientSocket));
HostName = clientSocket.getInetAddress().getHostName();
HostIp = clientSocket.getInetAddress().getHostAddress();
System.out.println(HostName + "/" + HostIp);
PC = HostName + "/" + HostIp;
cn.insert(PC);
} catch (IOException e) {
System.err.println("Unable to process client request");
e.printStackTrace();
} catch (ClassNotFoundException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
Thread serverThread = new Thread(serverTask);
serverThread.start();
}
private class ClientTask implements Runnable {
private final Socket clientSocket;
private ClientTask(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
System.out.println("Got a client !");
try {
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
当我使用客户端时,我会获取 IP 和主机名,但是,如果我启动另一个客户端,它不会监听它。
我做错了什么?我认为没有必要上传我的客户端代码,因为我得到了第一个,所以我认为我在这方面做错了什么。
最佳答案
您必须将线程放入 while 循环中,如果没有它,在创建一个连接后代码就会完成并停止。
关于java - 我的 serverSocket 中仅获取一个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604467/