您的位置:首页 > 移动开发 > Android开发

一个关于Andriod的SSL双向认证的SSLSocket库—SelevenSSLSocket

2016-07-29 19:08 543 查看

一个关于Andriod的SSL双向认证的SSLSocket库—SelevenSSLSocket

##自己封装的一个SSLSocket库,该库是SSL双向认证的.笔者对之前做过项目自己做的一个库.第一次自己做库,各路大神不要吐槽.假如有说错的地方或者是有需要改进的地方,希望各路大神多多指教,本人邮箱为790707677@qq.com,库的话我晚点上传,今天网络不太好,晚点试试.或者感兴趣的读者可以直接发邮件给我.

SelevenSSLSocket使用说明

功能说明:SelevenSSLSocket是针对Android开发的一个SSLSocket通讯库.可以使用其进行对应的长短链接SSLSocket通讯.此说明包含以下几个部分:

1.SelevenSSLSocket基本文件构成.

2.SelevenSSLSocketAPI说明

3.SelevenSSLSocket短链接通讯.

4.SelevenSSLSocket长链接通讯.

1.基本文件构成

SelevenSSLSocket主要包含以下文件

a: SelevenSSLSocket.java——SelevenSSLSocket基本操作类.包含SelevenSSLSocket初始化使用到的各个参数设置,初始化函数,长链接各函数,短链接各函数.清除各类流,socket操作.

b: SSLSocketLongConnectionInterface.java——SSLSocketLongConnectionInterface是SelevenSSLSocket的长链接接口类,包含SSL初始化回调,长链接发送数据回调,长链接接收数据回调.

c: SelevenSSLSocketService.java——SelevenSSLSocketService是SelevenSocket长链接收服务类.主要用于定义一个后台服务不断接收来自服务器回复的消息.其机制利用SSLSocketLongConnectionInterface中的长链接接收数据回调函数,这里我们将会在后面提到.

d: SelevenSSLSocketHeartBeatTimer.java——SelevenSSLSocketHeartBeatTimer是SelevenSSLSocket长链接发送心跳包内部自定义的一个定时任务类.用于发送心跳包维持长链接.

2.SelevenSSLSocketAPI说明

a: SelevenSSLSocket.java

/**
* SSLSocket初始化函数,使用SSLSocket必须先对其进行初始化
* @param Context Application对象
* @param key 私钥证书
* @param ca 公钥证书
* */

public void init(Context context,int key,int ca);


/**
* SSLSocket 长链接初次连接函数
* @param strBuf 发送字符
* @param hostName 连接的服务器名称
* @param serverPort 连接的服务器端口
* @return 长链接初次连接返回字符,接收失败返回SelevenSSLSocket.NG_RECV
* */
public  String longConnectionInit(String strBuf,String hostName,int serverPort);


/**
* 长链接在发送函数LongConnectionInit成功返回信息之后,单次发送数据
* @param strBuf 发送的数据
* @return 返回发送是否成功,true为发送成功,false为发送失败
* */
public  Boolean longConnectionSend(String strBuf);


/**
* 长链接在发送函数LongConnectionInit成功返回信息之后,单次发送数据
* @param strBuf 发送的数据
* @return 返回发送是否成功,true为发送成功,false为发送失败
* */
public  String longConnectionRecv();


/**
* 短链接发送函数
* @param strBuf 发送内容
* @param hostName 连接的服务器名称
* @param serverPort 连接的服务器端口
* @return 接收字符,假如接收失败,则返回ng
* */
public String shortConnection(String strBuf,String hostName,int serverPort);


/**
* socket输入输出流close,以及socket的close
* 此函数会将长链接接口函数的接口清除掉,因此,执行完该函数以后应该重新为长链接接口进行重置
* SSLSocketLongConnectionInterface:长链接接口类
* */
public void clearSocket();


/**
* 开启长链接接收服务
* @param Context 当前Activity
* */
public void startLongSSLSocketService(Activity context);


/**
* 开启长链接心跳包服务
* @param delay 心跳包发送首次延迟时间
* @param period 心跳包发送周期
* @param heartBeatString 心跳包字符串
* */
public void startTimerLongConnection(long delay,long period,String heartBeatString);


/**
* 清除长连接开启服务以及清除心跳包定时器
* */
public void clearLongConnectionServiceAndTimmer();


/**
* 设置连接超时时间,默认是5000(5秒)
* @param connectTimeout 连接超时时间
* */
public void setConnectTimeout(int connectTimeout);


/**
* 设置接收消息超时时间,默认是5000(5秒)
* @param recvTimeout 接收消息超时时间
* */
public void setRecvTimeout(int recvTimeout);


/**
* 设置SSL通讯私钥密码
* @param cLIENT_KET_PASSWORD; 私钥密码
* */


/**
* 设置SSL通讯公钥密码
* @param cLIENT_KET_PASSWORD 公钥密码
* */
public String getCLIENT_TRUST_PASSWORD();


/**
* 设置当前SSLSocket接收发送过程中,流接收后的编码方式,默认为UTF-8
* */
public void setENCONDING(String eNCONDING);


b.SSLSocketLongConnectionInterface.java

/**
* SSLSocket初始化回调,发送消息成功isSuc为true,失败者为false
* sendBuf为发送的消息
* */
public void SSLSocketInit(Boolean isSuc);


/**
* 长链接接口发送回调,发送消息成功isSuc为true,失败者为false
* sendBuf为发送的消息
* */
public void SSLSocketLongConnectionSend(Boolean isSuc,String sendBuf);


/**
* 长链接接口接收回调,接收消息成功isSuc为true,失败者为false
* 成功recv为接收到的内容,失败recv为"ng"
* */
public void SSLSocketLongConnectionRecv(Boolean isSuc,String recv);


3.SelevenSSLSocket短链接通讯.

SelevenSSLSocket进行短链接通讯步骤如下:

a.初始化SSLSocket.

  SelevenSSLSocket sslsocket = new SelevenSSLSocket();
sslsocket.init(getApplicationContext(), R.drawable.key, R.drawable.ca);


b.调用SSLSocket短链接收发函数

String sendBuf = "This is a message send!";
sslsocket.shortConnection(sendBuf);


4.SelevenSSLSocket长链接通讯.

SelevenSSLSocekt进行长链接通讯步骤如下:

a.初始化SSLSocket.

  SelevenSSLSocket sslsocket = new SelevenSSLSocket();
sslsocket.init(getApplicationContext(), R.drawable.key, R.drawable.ca);


b.在AndroidManifast中注册长链接接收服务.

<service android:name="com.seleven.sslsocket.SelevenSSLSocketService"></service>


c.在调用的Activity中继承长链接接口SSLSocketLongConnectionInterface,并实现相关函数.

eg:public class MainActivity extends Activity implements SSLSocketLongConnectionInterface{

}


d.设置SSLSocket对象对应的接口SSLSocketLongConnectionInterface.

sslsocket.setLongConnectionInterface(MainActivity.this);


f.调用函数public String longConnectionInit(String strBuf,String hostName,int serverPort);完成长链接首次数据交互,比如登录的账号密码信息:

JSONObject data = new JSONObject();
data.put("login_name", "aaabb");
data.put("password", "aaabb");
sslsocket.longConnectionInit(dara.toString(),HOST_NAME, SERVER_PORT);


g.在适当的地方调用public void startTimerLongConnection(long delay,long period,String heartBeatString)函数开启SelevenSSLSocket服务,并设置心跳包消息,心跳包延迟启动时间,心跳包发送周期.

sslsocket.startTimerLongConnection(5000, 5000,"心跳包消息");


h.发送消息成功或失败,接收消息成功或者失败(接收超时默认为5s).将会触发接口SSLSocketLongConnectionInterface的回调函数public void SSLSocketLongConnectionSend(Boolean isSuc,String sendBuf);以及public void SSLSocketLongConnectionRecv(Boolean isSuc,String recv);

i.在恰当的时候,应该清除SSLSocket长链接的服务,调用public void clearLongConnectionServiceAndTimmer();函数.(比如在系统得知连接已经断开的时候,可以通过发送消息是否失败,心跳包是否有回复,接收消息ng次数等消息进行自行判断).再重新调用函数 public String longConnectionInit(String strBuf,String hostName,int serverPort),建立连接.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息