
HP_Socket_v6.0.8易语言源码
这是一个面向易语言使用者整理的 HP-Socket 封装项目,基于原来的 HPSocket 5.9.1 示例工程升级维护,主要目标是:让易语言可以更稳、更方便地调用新版 HP-Socket,并提供一个能直接参考的 HTTP/HTTPS Server 示例。
本次整理重点更新了 HPSocket4C.dll、HP_Socket 易语言模块封装,以及 Http_Server.e 示例代码。原工程能跑,但里面有一些老版本遗留问题和示例级代码隐患,这次顺手把这些坑填了一遍。
项目内容
HP_Socket 易语言模块封装
官方 HPSocket4C.dll 6.0.8 x86
Http_Server.e HTTP/HTTPS Server 示例
GET / POST 请求处理示例
线程池异步处理请求示例
HTTPS SSL 初始化示例
内置 DLL 资源自动释放逻辑
适合谁用
这个项目适合下面这些场景:
易语言开发 TCP / UDP / HTTP / HTTPS 程序
想在易语言里使用 HP-Socket 高性能网络库
需要一个 HTTP 接口服务、本地服务、回调服务示例
想学习 HP-Socket C 接口在易语言里的封装方式
原来使用 5.9.1,想升级到 6.0.8 又不想自己一个个对接口
本次主要升级1. DLL 更新到 6.0.8
底层 HPSocket4C.dll 已更新为官方 HP-Socket 6.0.8 x86 版本。
2. 模块接口同步新版导出
HP_Socket 模块补充了 6.0.8 中新增或需要同步的接口,例如:
HP_Server_SetDualStack
HP_Server_IsDualStack
HP_UdpNode_SetDualStack
HP_UdpNode_IsDualStack
HP_TcpAgent_SetSyncConnectTimeout
HP_TcpAgent_GetSyncConnectTimeout
HP_TcpClient_SetSyncConnectTimeout
HP_TcpClient_GetSyncConnectTimeout
同时移除了新版 DLL 中已经不存在的 SYS_Alloca 声明,避免接口和 DLL 不匹配。
HP_Socket 模块修复UDP Node 地址获取问题
修复 IUdpNode.GetLocalAddress 调错函数的问题。原来的封装可能会调用到不对应的地址获取函数,导致获取结果不可靠。
UDP 端口类型修正
修正 UDP Node 相关端口参数类型,统一使用 短整数型,和 HP-Socket C API 的端口类型保持一致。
地址缓冲区更稳
优化 IServer、IAgent、IClient、IUdpCast、IUdpNode 的地址获取逻辑,减少地址被截断、缓冲区长度不够或读取失败的问题。
修复 IConvert 重复加载内存泄漏
IConvert.Load 重复调用时,旧 buffer 没有正确释放。现在会先释放旧数据,再加载新数据,避免内存越跑越高。
修复 IWinHttpEx 连接复用问题
优化 IWinHttpEx 的连接复用判断,避免错误复用无效连接。
修复 IWinHttpEx 超时状态清理
请求超时后会主动断开并清空 m_ConnId,避免后续请求继续拿旧连接 ID 发送。
Http_Server.e 示例修复1. 修复 HTTPS 对象未销毁
原示例只销毁了 g_HttpServer,没有销毁 g_HttpsServer。现在退出时会同时销毁 HTTP 和 HTTPS 对象。
2. 退出前先停止正在运行的服务
窗口销毁时,如果当前 server 还在运行,会先 Stop,再销毁对象,资源释放更规矩。
3. 删除 OnReceive 原始数据回发
原代码在 HTTP Server 的 OnReceive 事件里直接把收到的原始请求数据 Send 回客户Duan。
这对 HTTP 服务端来说不合适,容易破坏正常 HTTP 响应流程。现在 OnReceive 只返回 #HR_OK,真正的响应统一在请求完成后用 SendResponse 发送。
4. POST Body 增加大小限制
原示例会无限累加 POST 数据,遇到大请求或恶意请求时容易撑爆内存。
现在增加:
.常量 MAX_BODY_SIZE, “1048576”
默认限制为 1MB,超过直接返回错误。
5. 连接缓存创建失败会处理
OnAccept 中创建 IBufferPtr 或绑定 ConnectionExtra 失败时,现在会释放资源并返回错误,不再静默继续。
6. 线程池启动和提交任务增加检查
线程池创建/启动失败会记录日志。请求完成后提交任务失败,也会返回错误,避免请求挂住没有响应。
7. HTTPS SSL 初始化增加检查
启动 HTTPS 前会检查证书文件是否存在,并判断 SetupSSLContext 是否成功。
如果 SSL 没初始化成功,HTTPS 启动会被禁止,避免后面报一堆看不懂的问题。
8. 响应头修正
原来响应头写的是:
Accept: text/plain, text/html
Accept 是请求头,不适合作为响应头。
现在改为:
Content-Type: text/plain; charset=gbk9. 端口增加校验
启动前检查端口范围,必须是 1-65535。空端口、负数、超范围都会直接提示。
10. 启动失败后清空 m_server
如果 Start 失败,会把 m_server 清空,避免后续停止或销毁逻辑误判。
11. GetSenderName 更准确
原来只要不是 HTTP,就默认显示 HTTPS。现在未知句柄会显示 unknown,日志更真实。
12. 连接附加对象释放后清空
OnClose 释放 IBufferPtr 后,会调用 SetConnectionExtra(…, 0) 清空附加数据,避免异常路径重复引用。
使用建议推荐配套使用
建议 HP_Socket 模块、HPSocket4C.dll、Http_Server.e 示例保持同一套版本,不要混用旧模块和新 DLL。
如果模块是 6.0.8,DLL 也建议使用 6.0.8 x86。
HTTPS 需要证书
HTTPS 示例默认使用:
ssl-certserver.cer
ssl-certserver.prikey
ssl-certca.cer
如果证书不存在,HTTP 可以正常使用,HTTPS 会提示 SSL 未初始化。
POST 限制可自行调整
默认 POST Body 限制为 1MB:
.常量 MAX_BODY_SIZE, “1048576”
如果你的接口需要上传更大的数据,可以按实际情况调整。
注意事项
本整理版主要面向 32 位易语言环境。
HPSocket4C.dll 请放在程序运行目录,或使用示例内置释放逻辑。
如果易语言 IDE 已打开旧文件,更新后需要关闭并重新打开工程。
如果自己继续改 .e,建议保留备份,尤其是涉及模块、程序集变量和资源时。


评论(0)