⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketconpool.java

📁 java支持的短信平台
💻 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 + -