了解本专题之前默认读者已经具备了一定的NDK编程基础,因此NDK基础知识不在此进行阐述说明。
一、 AndroidStudio编译Openssl库
本文只提供armeabi-v7a以及arm64-v8a静态库文件,文件资源链接如下:Android openssl库文件
资源下载完成后已NDK编程方式放入工程中编译使用。(有积分的可以贡献点积分,也可私信博主获取资源文件哦)
二、Android Natvie实现openssl+Socket网络通讯
1、报文发送
int TCP_GPRS_Send_SSL(unsigned char *ucSendDat, unsigned int uiSendLen) {
LOGD("TCP_GPRS_Send_SSL sdat:%s slen:%d", ucSendDat, uiSendLen);
int iRet = 0;
iRet = SSL_write(psslSSL, ucSendDat, uiSendLen);
if (iRet == -1) {
LOGD("socket send failed\n");
return -1;
}
if (iRet == (int) uiSendLen) {
iRet = 0;
LOGD("socket send success\n");
}
if (0 != iRet) {
LOGD("SendPacket iRet : %d\n", iRet);
iRet = ERR_SOCKET_SEND_DATA;
}
return iRet;
}
2、报文接收
int TCP_GPRS_Recv_SSL(unsigned char *ucRecvBuff, unsigned int *uiRecvLen) {
int iRet = 0;
unsigned int len = 0;
unsigned int len2 = 0;
unsigned char ucDat[8192] = "\0";
unsigned int tmpLen = 0;
unsigned long ulStart = 0;
int ret;
struct timeval timeout = {
10, 0};
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(conn_fd, &rfds);
LOGD("conn_fd---->%d", conn_fd);
ulStart = GetTickCount();
LOGD("ulStart------->%d", ulStart);
do