开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8514|回复: 12
收起左侧

[易语言成品模块] 纯E高效通信模块(IOCP完成端口框架)纯E类引用

[复制链接]
结帖率:100% (4/4)
发表于 2019-11-12 12:18:26 | 显示全部楼层 |阅读模式   山东省菏泽市
分享例程
界面截图:
备注说明: 所有通信类截图
此模块是为了迎合广大E用户没有好用的通信模块而设具体功能请查看使用说明
压缩包,附带使用历程,
QQ截图20191112115214.jpg
QQ截图20191112115140.jpg
QQ截图20191112115054.jpg
QQ截图20191112114940.jpg

2019.11.12        增加 “_Server”类增加了几个客户类指针调用函数,具体请看 “模块使用说明”。
                修改 “_Server”类的源“取附加数据()”与“置附加数据()”修改为“取附加指针()”和“置附加指针()”

2019.11.11        修改 监听接受数投递方式,不在是单一的消耗过半才开始投递,默认情况下,只要有连接进入,就会在一个连接事件执行完毕后开始投递
                增加 轮询事件中也会在监听接受数等零的情况下开始投递

2019.11.10        优化 资源池分配与回收
                修复 组件类组在释放时的一个问题,导致未能正确释放资源

2019.10.30        更改 类组资源的分配,不在保存在源类组中,只保存在服务类池中,释放时直接彻底释放类资源,此方式加快了类资源的分配与释放

2019.10.12        修复 公开类子程序调用函数 创建服务组件() 诸多问题,尤其是UDP组件的创建与释放
                修复 UDPClient,不记录上传下载流量
                增加 创建客户组件() 与 销毁客户组件() 函数(非类函数)
                内部增加获取异常错误的代码,会让效率降低30%左右,后期稳定后再删除

2019.09.03        修复 类_TcpServer 启动服务时IP地址类型判断的错误导致启动失败
                修复 类_TcpServer.创建客户()与类_TcpServer.销毁客户() 类_UdpServer.创建客户()与类_UdpServer.销毁客户()函数

2019.09.02        修复一个服务组件类“启动()”函数,第二个参数错误,因类与普通函数的参数压入不同导致的参数错误,
                一个参数应该是类本身的指针,第二个参数参数才是函数参数开始,函数显示的第二个参数,其实是汇编压入的第三个参数,
                就因这一个参数导致了内存崩溃.

2019.08.20        修改为部分的参数数据在原子互斥下读写

2019.05.24        连接的自动“置附加数据”调用基类函数错误应该调用“ _属性类.指针()”实际确实调用的“_属性类.保留()”,
                导致在连接成功或失败中无法取出附加的数据,现已修复
                还发现另一个问题,如果多个“连接组件”绑定相同的本地IP与端口导致冲突,甚至也与“监听组件”冲突

2019.05.06        今日增加子程序调用函数,减少对类的依赖,增加灵活度

2019.04.26        今天发现几处使用说明的错误,修改之。对“_监听器属性类”的函数做了一些调整,让他与“_监听属性类”相对应
                具体请看使用说明

2019.04.21        今天终于把UDP添加完成,具体的用法请看历程
                UDP监听类引用层次与TCP监听类的引用层次基本相同,函数位置也基本相同,语义有所不同,具体请查看相关类
                UDP客户类与TCP客户类也是保持一样的引用层次,函数位置,语义基本相同,可能有个别函数不想同,具体请查看相关类
2019.04.20        发现几处常量说明错误,已修改回正常

2019.04.10        今天发现两处事件返回值的问题,在接收与发送事件中返回忽略,客户断开却不能把客户状态复位

2019.04.08        更换了重叠内存池,用单链表替换,效率提高了至少20%

2019.04.06        今天对IPv6的支持做了修改,以前需要输入“#网络模式_IPV6”常量才能支持IPv6地址,以后无需再输入此常量,内部会自动识别
                是IPv4还是IPv6地址,也对错误代码常量做了一些更新与修改请注意。
                “ TcpClient”类增加一基础保留函数,为了与以后的“UdpClient”类的函数相对于
                “   _Server”类增加一基础公开函数“置缓冲区长度()”,“_Monitor”也增加一个对应的保留函数
               
2019.04.05        增加一层“_Monitor”“_Server”类与“_Client”类,“_服务属性类”更名为“_监听器属性类”
                “MService”类更名为“NetMonitor”
                引用关系更改
                “ MService”《-“_Monitor”《-“_监听器属性类”《-“_属性类”
                “TcpServer”《-“ _Server”《-“  _监听属性类”《-“_属性类”
                “TcpClient”《-“ _Client”《-“  _客户属性类”《-“_属性类”
                类函数又从新做了分配,取参数与置参数的函数都被置于“_Monitor”“ _Server”“ _Client”以下的类层中以供上层使用

2019.04.04        今天为Client客户类,增加一层 _客户属性类,并与 _服务属性类 _监听属性类,函数总数同步,基本函数,隐藏函数数量,相等
                完善了“MServicr类”增加“创建监听组件()”“销毁监听组件()”类函数,并测试通过
                完善了 “组件服务类”,增加 “创建组件()”“销毁组件()”“是否启动()”
                “启动监听器()”“停止监听器()”“启动监听()”“停止监听()”“连接()”“连接服务()”
                “取投递数()”“取在线人数()”“取接受数()”“取连接数()”“取发送数()”“取接收数()”“取断开数()”
                “取资源状态()”
                准备明天完善使用说明,咋出个历程

2019.04.03        全部的类做了修改,具体请看使用说明

2019.04.02        完善TcpServr服务,对没有写代码的函数,进行了完善,优化效率,更换了重叠池

2019.03.29        加入IPv6的支持,测试通过
                也修复了几处错误

2019.03.28        今天写了个测试程序共大家一起测试

2019.03.25        今天终于把功能基本完善了,可用正常使用楼,真的很高兴.类_TcpServer与类_TcpClient测试基本没问题了

2019.03.17        对类从新分层
                             _属性类        为基础类,当前为 _服务属性类 _监听属性类 类_TcpClient 的基类,里面保存了全部数据(以后可能还需要扩展内部的数据)

                         _服务属性类        为监听器的下层服务类
                         类_MService        为监听器服务类,此类为其它通信类提供IOCP完成端口线程队列功能

                        _监听属性类        为其它通信服务的属性设置取出数据
                        类_TcpServer        为accept(接受)connect(连接)服务更为send(发送)recv(接收)服务
                       
                        类_TcpClient        为客户类,功能主要是储存数据更提供accept(接受)connect(连接)服务与send(发送)recv(接收)服务的功能支持

                        功能的具体使用方法与解释请查看模块或使用说明

2019.03.16        再次温习了一遍项目,发现大量不合理的地方,看来还是需要动大刀

2019.03.15        今天终于把公司项目搞定了,接着对此项目做更新

2019.01.22        因公司项目出了致命问题,不得不先放下此项目,等有时间在更新

2019.01.20        为了适应新框架,不得使用了大量的汇编CALL,又掏了一个在子程序中获取子程序指针的汇编函数.

2019.01.15        新模式框架基本转换完毕,很多新问题有待处理

2019.01.12        IOCP通信放弃只使用子程序过程模式,改为类调用+子程序辅助模式

2018.11.24        修复因客户池的枚举句柄函数的变动导致的未能正确复位客户指针的问题

2018.11.22        修复监听器组件销毁时的一个重大问题,
                 1.因疏忽销毁监听器组件时IOCP句柄错误而导致的工作线程未按规定退出
                 2.因改动调用内存池类的方式导致进入死循环

2018.10.31        此版本重大改进,取消发送队列,取消发送内存池,只保留客户内存池,发送与接收数据的指针直接使用堆内存
                加入异常代码,可能导致程序效率低于正常水平,在绝对稳定的情况下会剔除异常代码来提升执行效率

2017年7月13日        IOCP网络重大更新,和修复一些错误
                      1.增加发送列队,改善了大数据无法发送(可以发送 缓存区大小*20 KB 大小的数)的问题和数据包错乱的问题
                 2.把绑定在服务句柄上的内存池改为全局内存池,包括“客户内存池”;“缓存区内存池”
                 3.自动内存释放,暂时删除,后续再启用
                 4.上次更新的异步和同步投递发送数据不理想,改为了发送列队
                 5.“发送()”函数有原来的5个参数改为2个参数,删除参数:“回调函数”;“回调参数1”;“回调参数2”,
                   “发客户数据()”函数与“发送()”函数一样删除3个参数,“发送()”函数直接调用 “发客户数据()”函数,里面没有多余代码
                 6.修改部分常量前序:“#网络服务_XXX”,修改为“#网络状态_XXX”,修改部分常量后续:“#网络状态_并发线程池”,
                   修改为“#网络状态_最大并发数”;“#网络状态_并发等待数”,修改为“#网络状态_工作等待数”,
                   增加了一个网络状态常量:“#网络状态_信号并发数”
                 7.为 “发送()” 函数添加了错误常量错误,获取方式使用系统API “GetLastError()” 后期会把IOCP网络服务都添加上错误常量
                 8.修改 “启动服务()” 函数的返回值为逻辑值,取消了服务句柄概念,以前的一些函数获取服务句柄的状态,不再需要提高服务句柄
                 9.“连接服务器()” 函数的第一个参数有原来的必须提高改为可空,只能提供监听句柄
                 10.“开启监听()” 函数第五个参数有原来的“索引”参数改为“承载人数”

2017年5月5日   IOCP网络服务 内存自动释放.函数 更新,修复错误
                1.内部加入了自动释放空闲的客户句柄和数据缓冲区
                2.“发数据()”和“发客户数据()”这两个函数有原来的异步投递数据,改为同步投递数据(以后会改为异步和同步可同时进行)
                3.修复大量连接占用大内存的问题,现在真正的做到了10W客户只需占用几十M或上百M的内存(原因是每个客户预先分配一定长度的接收缓冲区,
                  现在是只在真正有数据到达的时候才去从内存池去分配内存)
                4.更新函数 “断开客户()” 加入安全关闭拖延超时,可以让客户的断开方式更人性化

2016年1月14日        IOCP网络服务内存池更新,修复一些错误.
                 1. 把全局内存池改为了,绑定在服务句柄上,服务句柄被回收,绑定在本句柄上的内存池中的内存也会被释放掉.
                 2. 修复“置客户父索引()”函数导致的服务指针 获取失败的问题
                 3. 修复释放客户句柄中的缓冲区指针错误(是自己的失误,使用错了API函数导致释放内存错误)
                 4. 后续可能会做个较大的更新(套接字重用)

2015年12月31日        IOCP网络服务线程池更新
                 1. 把记录启动线程数和工作线程数;空闲线程数;等几个使用临界区互斥改为原子互斥,效率提升了20%
                 2.“服务状态()”增加了新的线程状态
                 3. 修改了线程池的自动增减线程的代码,比以前更智能,效率更高
                 4. 后续准备对内存池做一些优化和更新

2015年12月26日        IOCP网络服务做了一些更新 和 添加一个 进程通信类 更新如下

                 1. 把外部使用到的常量加了前序 原来是“启动线程数”改为 “网络服务_启动线程数”
                 2. 把内部客户句柄加入客户数组的临界互斥方式改为了原子互斥方式
                 3. 修复一个会有“关闭服务()”导致的无限启动线程的问题
                 4. 进程通信类的具体使用方法请看类方法说明



WinSock通信-2019.11.12.rar (607.08 KB, 下载次数: 33)

评分

参与人数 1好评 +1 精币 +1 收起 理由
指尖流淌 + 1 + 1 感谢分享,很给力!~

查看全部评分


友情提醒:请选择可信度高的模块,勿用未知模块,防止小人在模块内加入木马程序。【发现问题模块请到站务投诉】。
结帖率:100% (22/22)
发表于 2023-11-23 08:37:56 | 显示全部楼层   河南省漯河市
感谢感谢
回复 支持 反对

使用道具 举报

结帖率:83% (67/81)
发表于 2020-3-16 09:34:37 | 显示全部楼层   江苏省扬州市
客户和客户间如何通信
回复 支持 反对

使用道具 举报

发表于 2020-2-13 10:38:38 | 显示全部楼层   广东省广州市
好像很厉害哦
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2019-12-25 23:44:26 | 显示全部楼层   江苏省宿迁市
谢谢楼主分享,下载看看
回复 支持 反对

使用道具 举报

签到天数: 16 天

发表于 2019-12-5 02:22:47 | 显示全部楼层   山东省菏泽市
感谢朋友分享
回复 支持 反对

使用道具 举报

结帖率:13% (1/8)
发表于 2019-11-26 23:09:53 高大上手机用户 | 显示全部楼层   浙江省宁波市
能教下怎么使用吗
回复 支持 反对

使用道具 举报

发表于 2019-11-17 21:53:47 | 显示全部楼层   河南省洛阳市
谢谢楼主分享更新,支持
回复 支持 反对

使用道具 举报

结帖率:100% (17/17)

签到天数: 28 天

发表于 2019-11-17 16:32:15 | 显示全部楼层   山东省青岛市
谢谢楼主分享,下载看看
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)
发表于 2019-11-14 01:05:44 | 显示全部楼层   辽宁省沈阳市
好的.我下了.谢谢!试试看看!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表