(需要源代码,请您告诉我您的邮箱)
我做了TCP通讯一套组件,都封装成了进程内COM组件:服务器采用完成端口模型;客户端里直接封装了一个IdTCPClient;应用层协议解析函数也封装了一个。
TCP服务器组件配合应用层协议解析工具,给应用程序提供数据服务,实现了给应用程序提供离散的应用层数据包,实测可充分利用千兆网带宽,而且运行很稳定,我是比较满意的。
TCP客户端出现了问题。如果我不封装,则性能很稳定,连续与服务器收发包,尚未发现问题。但是当我用COM组件封装之后出现了不确定的灾难性后果,函数中try…无法捕捉该异常,是内存访问错误,而这个内存位置单从数值上看是用户方式的合法地址。
我起初以为是COM组件接口部分可能有问题,但是当我分别采用了安全数组和共享内存指针两种方式与组件进行了数据交互之后,暂时认为不是接口的问题(但是高手也不要被我误导哦)。
组件中我给接收开了一个线程,直接调用的CreateThread,不知道这个会不会有问题。对于IdTCPClient的调用,不同线程使用了临界区进行保护。内存泄露也未发现(拿单元做测试时)。
我郁闷了两天了,排查到最后没办法了,只好到这里请教各位高手。
希望高手能够指点迷津,不胜感激。
我做了TCP通讯一套组件,都封装成了进程内COM组件:服务器采用完成端口模型;客户端里直接封装了一个IdTCPClient;应用层协议解析函数也封装了一个。
TCP服务器组件配合应用层协议解析工具,给应用程序提供数据服务,实现了给应用程序提供离散的应用层数据包,实测可充分利用千兆网带宽,而且运行很稳定,我是比较满意的。
TCP客户端出现了问题。如果我不封装,则性能很稳定,连续与服务器收发包,尚未发现问题。但是当我用COM组件封装之后出现了不确定的灾难性后果,函数中try…无法捕捉该异常,是内存访问错误,而这个内存位置单从数值上看是用户方式的合法地址。
我起初以为是COM组件接口部分可能有问题,但是当我分别采用了安全数组和共享内存指针两种方式与组件进行了数据交互之后,暂时认为不是接口的问题(但是高手也不要被我误导哦)。
组件中我给接收开了一个线程,直接调用的CreateThread,不知道这个会不会有问题。对于IdTCPClient的调用,不同线程使用了临界区进行保护。内存泄露也未发现(拿单元做测试时)。
我郁闷了两天了,排查到最后没办法了,只好到这里请教各位高手。
希望高手能够指点迷津,不胜感激。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货