资源介绍:
模块里有类_客户端_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)
资源下载:
易语言socket
易语言ssl
易语言 socket通信
易语言 ssl模块
易语言+ssl+smtp
易语言 ssl浏览器
易语言 Socket ssl
易语言SSL邮件
易语言socket局域网通讯
易语言获取socke+port
易语言+网截+ssl
易语言SSL源码
易语言 SSL
易语言socket发送ssl
易语言tcpclient源码
易语言SSL解密
易语言连接socket
易语言+closesocket
易语言写ssl
易语言网络通信模块
易语言+socket+模块
易语言通信模块源码
易语言+tls+tcp