易语言SSL_Socket通信模块源码

资源介绍:

模块里有类_客户端_SSL,类_服务端_SSL,KernelFunc,类_许可区,类_网络环境_SSL

资源作者:

易语言入门教程学习

资源界面:

.版本 2 .程序集 类_客户端_SSL, , 公开 .程序集变量 hSocket .程序集变量 m_ServSockAddr, sockaddr .程序集变量 CTX .程序集变量 hSSL, 整数型 .程序集变量 m_ClientCert, 文本型 .程序集变量 m_ClientKey, 文本型 .程序集变量 Bak_ClientStruct, t_ClientStruct .子程序 _初始化 ' 本源码来自三叶资源网(www.sanye.cx) 类_客户端_SSL.设置证书文件 (“ClientCert.pem”, “ClientKey.pem”) .子程序 _销毁 类_客户端_SSL.断开连接 () .子程序 设置证书文件, , 公开 .参数 客户证书, 文本型, , ClientCert.pem .参数 客户私钥, 文本型, , ClientKey.pem m_ClientCert = 客户证书 m_ClientKey = 客户私钥 .子程序 连接, 逻辑型, 公开 .参数 目标地址, 文本型 .参数 端口, 短整数型 .参数 通知函数, 子程序指针, , [必须有1个参数=消息类型] .参数 超时时间, , 可空 .参数 立即SSL连接, 逻辑型, 可空, [默认不用管,代理连接时需要] .局部变量 fd_read, fd_set .局部变量 fd_write, fd_set .局部变量 返回值, 整数型 .局部变量 meth, 整数型 .如果真 (目标地址 = “” 或 端口 = 0) 返回 (假) .如果真结束 meth = TLSv1_client_method () ' 放在第一句可以让DLL初始化.. 类_客户端_SSL.断开连接 () CTX = cdeclCall (ProcAddr (“SSL_CTX_new”), meth) .如果真 (LoadCRTFile (CTX, m_ClientCert, m_ClientKey) = 假) 类_客户端_SSL.断开连接 () 返回 (假) .如果真结束 Bak_ClientStruct.NotifyProc = 到数值 (通知函数) Bak_ClientStruct.hSocket = _socket (#AF_INET, #套接类型_Stream, #协议_TCP) .如果真 (Bak_ClientStruct.hSocket = #SOCKET_ERROR) 返回 (假) .如果真结束 _setsockopt (Bak_ClientStruct.hSocket, #SOL_SOCKET, #SO_RcvBuf, 0, 4) ' 设置读取缓存大小为0 _setsockopt (Bak_ClientStruct.hSocket, #SOL_SOCKET, #SO_SndBuf, 0, 4) ' 设置写入缓存大小为0 m_ServSockAddr.sin_family = #AF_INET m_ServSockAddr.sin_port = _ntohs (端口) m_ServSockAddr.sin_addr = GetNetAddrName (目标地址) .如果真 (是否为空 (超时时间)) 超时时间 = 3000 .如果真结束 _ioctlsocket (Bak_ClientStruct.hSocket, #FIONBIO, 1) _connect (Bak_ClientStruct.hSocket, m_ServSockAddr, #SizeOf_sockaddr) fd_write.fd_count = 1 fd_write.fd_array = Bak_ClientStruct.hSocket .如果 (超时时间 = -1) 返回值 = _select_Forever (0, fd_read, fd_write, 0, 0) .否则 返回值 = _select (0, fd_read, fd_write, 0, 辅_GetTimeOut (超时时间)) .如果结束 _ioctlsocket (Bak_ClientStruct.hSocket, #FIONBIO, 0) .如果真 (返回值 ≤ 0) _closesocket (Bak_ClientStruct.hSocket) 返回 (假) .如果真结束 hSocket = Bak_ClientStruct.hSocket .如果真 (是否为空 (立即SSL连接) = 真 或 立即SSL连接 = 真) .如果真 (建立SSL连接 () = 假) 类_客户端_SSL.断开连接 () 返回 (假) .如果真结束 .如果真结束 返回 (真) .子程序 取Socket句柄, 整数型, 公开, [使用代理协商时用到] 返回 (hSocket) .子程序 建立SSL连接, 逻辑型, 公开, [使用代理之后必须用到] .局部变量 ptr, 整数型 ' SSl== Bak_ClientStruct.hSSL = cdeclCall (ProcAddr (“SSL_new”), CTX) hSSL = Bak_ClientStruct.hSSL .如果真 (hSSL = 0) 返回 (假) .如果真结束 cdeclCall (ProcAddr (“SSL_set_fd”), hSSL, hSocket) .如果真 (cdeclCall (ProcAddr (“SSL_connect”), hSSL) = #SSL_ERROR) 返回 (假) .如果真结束 ' === ptr = _GlobalAlloc (0, #SizeOf_ClientStruct) CopyFromClientStruct (ptr, Bak_ClientStruct, #SizeOf_ClientStruct) _CreateThread (0, 0, &线程_客户端_事件获取, ptr, 0, 0) 返回 (真) .子程序 断开连接, , 公开 .如果真 (hSSL ≠ 0) cdeclCall (ProcAddr (“SSL_shutdown”), hSSL) cdeclCall (ProcAddr (“SSL_free”), hSSL) hSSL = 0 .如果真结束 .如果真 (hSocket ≠ 0) _shutdown (hSocket, #SD_BOTH) _closesocket (hSocket) hSocket = 0 .如果真结束 .如果真 (CTX ≠ 0) cdeclCall (ProcAddr (“SSL_CTX_free”), CTX) CTX = 0 .如果真结束 m_ServSockAddr.sin_port = 0 m_ServSockAddr.sin_addr = 0 .子程序 取服务器IP, 文本型, 公开 返回 (_inet_ntoa (m_ServSockAddr.sin_addr)) .子程序 发送数据, 整数型, 公开, 返回发送成功长度[有些对方的缓存大小是有限制的] .参数 数据, 字节集 .局部变量 返回值 .如果真 (hSSL = 0) 返回 (-1) .如果真结束 .如果真 (数据 = { }) 返回 (0) .如果真结束 ' 返回值 = _send (hSocket, 数据, 取字节集长度 (数据), 0) 返回值 = cdeclCall (ProcAddr (“SSL_write”), hSSL, Ptr_Bin (数据), 取字节集长度 (数据), 0) 返回 (返回值) .子程序 取回数据, 字节集, 公开 .参数 通知参数值 .局部变量 ClientStruct, t_ClientStruct .如果真 (通知参数值 = 0) 返回 ({ }) .如果真结束 CopyToClientStruct (ClientStruct, 通知参数值, #SizeOf_ClientStruct) 返回 (指针到字节集 (ClientStruct.DataParam, _GlobalSize (ClientStruct.DataParam))) .子程序 取消息类型, 整数型, 公开 .参数 通知参数值 .局部变量 ClientStruct, t_ClientStruct .如果真 (通知参数值 = 0) 返回 (-1) .如果真结束 CopyToClientStruct (ClientStruct, 通知参数值, #SizeOf_ClientStruct) 返回 (ClientStruct.MsgType) .子程序 标记参数是否正确, 逻辑型, 公开, [没有类似[取事件组件()]的命令,所以用这个来代替] .参数 通知参数值 .局部变量 ClientStructStruct, t_ClientStruct .如果真 (通知参数值 = 0 或 hSocket = 0) 返回 (假) .如果真结束 CopyToClientStruct (ClientStructStruct, 通知参数值, #SizeOf_ClientStruct) 返回 (ClientStructStruct.hSocket = hSocket)

资源下载:

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

易语言SSL_Socket通信模块源码》有0个想法

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注