📄 server.java
字号:
import java.util.*;import java.io.*;import java.net.*;public class Server { protected Map services; Set connections; int maxConnections; int freeConn; ThreadGroup threadGroup; private int currentConn; private PrintWriter log = new PrintWriter(System.out, true); public boolean connected = false; public Properties proPort, proNum; public synchronized void setControlFlag() { connected = true; } public synchronized void removeControlFlag() { connected = false; } public void setProperty(Properties proPort, Properties proNum) { this.proPort = proPort; this.proNum = proNum; } public Server(int maxConn) { this.maxConnections = maxConn; this.freeConn=maxConnections; this.threadGroup = new ThreadGroup(Server.class.getName()); currentConn = 0; this.services = new HashMap(); this.connections = new HashSet(maxConnections); } public synchronized void addService(Service service,int port, int maxConn) throws IOException { String servicename = service.getClass().getName(); Integer key = new Integer(port); if (services.get(key) != null) throw new IllegalArgumentException("端口:" + port + " 已经被占用!"); if (getfreeConnections(maxConn)>=0) { Listener listener = new Listener(this, port, service, maxConn); services.put(key,listener); log.println("启动" + servicename + "服务在" + port +"端口上"); listener.start(); } else { System.err.println("系统并发连接限制已经达到最大值!"); System.err.println("服务" + servicename + " 启动失败!"); } } public synchronized void addService(Service service,int port) throws IOException { this.addService(service,port,10); } public synchronized boolean removeService(int port) { Integer key = new Integer(port); int maxConn =10; final Listener listener = (Listener) services.get(key); if (listener == null) { log.println("Service " + " isn't started on port " + port); return false; } services.remove(key); listener.pleaseStop(); freeConn+=listener.maxConn; log.println("Close " + listener.service + " on port " + port); return true; } public synchronized void displayStatus(PrintWriter out) { Iterator keys = services.keySet().iterator(); while (keys.hasNext()) { Integer port = (Integer) keys.next(); Listener listener = (Listener) services.get(port); out.println("服务" + listener.service + "运行" + port + "\n"); } out.println("连接限制为" + maxConnections); Iterator conns = connections.iterator(); while (conns.hasNext()) { Socket s = (Socket) conns.next(); int sport = s.getLocalPort(); Listener listen = (Listener) services.get(new Integer(sport)); String servicename = listen.service; out.println("服务" + servicename + "响应请求在" + s.getInetAddress().getHostAddress() + "的" + sport + "端口上" + "\n"); } out.println("当前连接数为" + currentConn); out.println("当前系统空闲连接数为" + freeConn); } private synchronized int getfreeConnections(int maxConn) { int num = -1; if (freeConn >= maxConn) { freeConn-=maxConn; num = freeConn; } return num; } public synchronized int getConnections() { return currentConn; } public synchronized int addConnections(Socket s) { connections.add(s); return currentConn++; } public synchronized int removeConnections(Socket s) { connections.remove(s); try { s.close(); } catch (Exception e) { System.out.println(e.getMessage()); } return currentConn--; } public synchronized int getConnections(int connections) { int num = 0; if ((num=freeConn-connections) >= 0) { freeConn = num; } else num = -1; return num; } private synchronized int getFreeConn() { return freeConn; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -