📄 socketconpool.java
字号:
package com.khan.socket;
import java.util.LinkedList;
import java.io.DataInputStream;
import java.net.Socket;
import com.khan.file.Log;
import java.io.*;
import com.khan.util.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class SocketConPool {
protected String Host = "127.0.0.1";
protected int iPort = 7890;
protected int iTimeout = 1000 * 10;
protected LinkedList listCon = new LinkedList(); // 一个存放链接池的链表
/**最大连接数*/
protected int nMaxCon = 0;
/**当前已用连接数*/
protected int nConNum = 0;
protected Log log = new Log("SocketConPollLog.out");
protected Log err = new Log("SocketConPollLog.err");
public SocketConPool(String host, int port, int timeout, int max_con) {
this.Host = host;
this.iPort = port;
this.iTimeout = timeout;
this.nMaxCon = max_con;
}
/**建立连接容器
* @return SocketPoolCon 返回一个连接容器*/
protected SocketPoolCon createCon() {
SocketPoolCon pCon = new SocketPoolCon();
try {
//common.Assert("debug: Socket CreateCon, Host:"+ Host +" port:"+iPort);
pCon.socket = new Socket(Host, iPort);
pCon.socket.setSoTimeout(iTimeout);
nConNum++;
log.logOut("建立一个Socket, con num:" + nConNum + " max:" + nMaxCon);
} catch (Exception e) {
err.logOut("建立连接失败", e);
}
return pCon;
}
/**从连接池中取得连接(线程安全函数)
* @return SocketPoolCon 返回的数据库连接容器
* */
synchronized public SocketPoolCon get() {
if (listCon.size() > 0) { //有连接时,直接取得连接
return (SocketPoolCon) listCon.removeFirst();
}
if (nConNum < nMaxCon) { //如果没有多余连接,但连接池未满,新建一个连接
return createCon();
}
err.logOut("获取连接池socket出错, too many con: " + nConNum + " max:" + nMaxCon);
return null;
}
/**销毁连接
* @param pCon SocketPoolCon*/
synchronized public void release(SocketPoolCon pCon) {
listCon.add(pCon);
}
public boolean checkSocket(SocketPoolCon socket_con) {
if (socket_con.socket == null) {
err.logOut("该socket为null!");
return false;
}
try {
java.io.DataInputStream in = new DataInputStream(socket_con.socket.getInputStream());
} catch (IOException e) {
err.logOut("该socket IO通讯异常!", e);
return false;
} catch (Exception e) {
err.logOut("该socket 通讯异常!", e);
return false;
}
return true;
}
/**回收器
* 将连接池中的所有连接关闭*/
protected void finalize() {
try {
while (listCon.size() > 0) {
SocketPoolCon pCon = (SocketPoolCon) listCon.removeFirst();
pCon.socket.close();
nConNum--;
}
} catch (Exception e) {
err.logOut("回收socket连接池,关闭连接失败", e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -