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

📄 cmppsocket.java

📁 java支持的短信平台
💻 JAVA
字号:
package com.khan.sms.socket;

import java.net.Socket;
import java.io.*;
import com.khan.sms.cmpp3.*;
import com.khan.util.*;
import com.khan.file.Log;

public class CmppSocket {
  public Socket socket = null;
  public boolean isConnected = false;

  protected String Host = "127.0.0.1";
  protected int iPort = 7890;
  protected int iTimeout = 1000 * 10;

  String sUser = null;
  String sPass = null;
  byte bVersion = 0;
  static int iOriginator = 0;

  protected Log log = new Log("SocketConPollLog.out");
  protected Log err = new Log("SocketConPollLog.err");

  public CmppSocket(String host,
                    int port,
                    int timeout,
                    String user,
                    String pass,
                    byte version,
                    int originator) {

    this.Host = host;
    this.iPort = port;
    this.iTimeout = timeout;
    this.sUser = user;
    this.sPass = pass;
    this.bVersion = version;
    this.iOriginator = originator;

  }


  protected boolean login(Socket con) throws IOException {
    boolean result = false;
    Cmpp3Connect cc = new Cmpp3Connect(sUser, sPass, (byte) (bVersion));
    cc.setSeqID(iOriginator++);
    byte[] login_data = cc.encodeCmpp();
    //SocketCommon.PrintDataHex(login_data); //

    common.Assert("debug:" + Thread.currentThread().getName()
                  + " 正在登陆,IP:" + Host + " Port:" + iPort + " User:" + sUser
                  + " Pass:" + sPass + " Version:" + bVersion);

    SocketCommon.Send(con, login_data); //发送登录信息
    common.Assert("debug:" + Thread.currentThread().getName() + " 登陆包发送完毕!");
    common.sleep(2000);
    byte[] login_resp_data = SocketCommon.Receive(con); //接收信息

    int command_id = SocketCommon.getDWord(login_resp_data, 4);

    //SocketCommon.PrintDataHex(login_resp_data); //

    if (command_id == Cmpp3Command.CMPP_CONNECT_RESP) { //判断command id
      Cmpp3ConnectResp ccp = (Cmpp3ConnectResp)new Cmpp3ConnectResp(login_resp_data).decodeCmpp();

      result = (ccp.bStatus == 0x00); //设定登录标志
      if (result) {
        common.Assert("debug:" + Thread.currentThread().getName() + " 登陆到网关!");
      } else {
        common.Assert("debug:" + Thread.currentThread().getName() + " 登陆失败!");
      }
    }

    return result;
  }


  /**建立连接容器
   * @return SocketPoolCon 返回一个连接容器*/
  protected Socket createCon() {
    isConnected = false;
    try {
      socket = new Socket(Host, iPort);
      common.Assert("debug:" + Thread.currentThread().getName() + " 连接到网关!");
      socket.setSoTimeout(iTimeout);
      setConnect(login(socket));
    } catch (Exception e) {
      err.logOut("建立连接失败", e);
    } finally {
      if (!getConnected()) {
        try {
          if (socket != null) {
            socket.close();
          }
        } catch (IOException e) {
          err.logOut("关闭连接失败", e);
        }
        return null;
      }
    }
    return socket;
  }


  /**从连接池中取得连接(线程安全函数)
   * @return SocketPoolCon 返回的数据库连接容器
   * */
  synchronized public Socket get() {
    if (getConnected()) {
      return socket;
    } else {
      if (socket != null) {
        socket = null;
      }
      return createCon();
    }
  }


  synchronized public boolean getConnected() {
    return isConnected;
  }

  synchronized public void setConnect(boolean connected) {
    isConnected = connected;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -