?? 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 + -