我有一个服务器套接字,我想打开它到多个客户端。 但只有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和主机名,但是,如果我启动另一个客户端,它就不会听它。
我做错了什么?我认为没有必要上传我的客户端代码因为我得到了第一个,所以我认为我做错了。
答案 0 :(得分:1)
您必须将Thread置于while循环中,在创建一个连接后没有它,代码完成并将停止。