📄 pooleddbserver.java
字号:
package athere.tp;
import java.io.*;
import java.net.*;
import java.util.Date;
/**
* 服务器实现,用线程池管理的服务器程序
*/
public class PooledDBServer{
private int maxConnections; //最大线程数
private int listenPort; //侦听端口号
public PooledDBServer(int port , int maxCon){
this.listenPort = port;
this.maxConnections = maxCon;
}
/**
* 初始化线程池中的线程,创建完的每个线程处于待命的状态,处理客户端的请求
*/
private void setupHandlers(){
for(int i=0 ; i<maxConnections ; ++i){
//创建PooledConnectionHandle对象,该类实现了runnable接口
PooledConnectionHandle connectionHandle = new PooledConnectionHandle();
//启动线程
new Thread(connectionHandle,"handle"+i).start();
}
}
/**
* 套接字开始侦听,开始接收请求
*/
public void acceptConnection(){
try{
System.out.println(new Date() + " Server Listened Port:" + listenPort);
ServerSocket server = new ServerSocket(listenPort,5);
Socket incomingSocket = null;
while(true){
incomingSocket = server.accept();
System.out.println(new Date() + " Accept a Socket:"+incomingSocket.toString());
/* 处理连接请求:
* 将客户socket传给PooledConnectionHandle的静态方法processRequest
* processRequest将socket放入请求队列
*/
PooledConnectionHandle.processRequest(incomingSocket);
}
}catch(BindException e){
System.out.println(new Date() + " Unable to bind to port.");
e.printStackTrace();
}catch(IOException e){
System.out.println(new Date());
e.printStackTrace();
}
}
//test start
//将server 在cmd 命令行中启动即可调试
public static void main(String[] args){
PooledDBServer tmp = new PooledDBServer(8059,20);
tmp.setupHandlers();
tmp.acceptConnection();
}
//test end
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -