开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 15608|回复: 139
打印 上一主题 下一主题
收起左侧

[易源码分享] 【原创】socket在R3中的实现流程,以及简单的服务端/客户Duan

  [复制链接]
跳转到指定楼层
楼主
发表于 2022-7-6 15:26:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   四川省宜宾市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -

前言:

  • 关于我为何重写afd.sys实现的socket?
  • 之前已经有人开源过利用afd.sys实现socket:R3应用层利用AFD驱动,编写自己的高效Socket服务
  • 但是因为写法的原因,这份源码不能在我的电脑上正常运行(检查了一下,是参数的坑,说白了还是易语言结构体的坑)
  • 于是我重新实现了一份源码(基于ReactOS的源码),这份源码的核心在于重实现mswsock.dll中的底层函数。(共实现14个函数,TCPsocket基本完善,由于UDPsocket使用的结构体过于复杂,相关的sendto、recvfrom等函数暂未实现)

正文:

  • 利用afd.sys的基本使用流程是:利用NtCreateFile创建一个名为“\Device\Afd\Endpoint”的“文件”,接着便可通过NtDeviceIoControlFile函数向afd.sys发送控制信息,例如发送IOCTL_AFD_SEND消息即表示是send:
  • 内部一共封装了14个函数:,熟悉socket的易友可以直接封装使用,内部效率还可以继续优化,想继续优化几十毫秒的可以继续优化。
  • 如果不会封装底层函数也没有问题,我已经尝试封装了一个简陋的TCPService和TCPClient模块,函数不多,功能是基本够用的
  • 封装好的服务端和客户端我也写了一个例子,客户端测试:
  • 服务端测试:
  • 里面的异步模型我使用的WSPEventSelect实现的,内部写得很简陋,不过基本够用,测试1000客户量稳定使用(更高的客户量请自行测试,由于设计简单,本模型还有更多的提升空间)
  • 本socket协议直接使用NtCreateFile,NtDeviceIoControlFile函数实现,完全没有调用ws2_32.dll等,相比于ws2_32.dll,实现过程内部简化很多,send和recv函数的效率明显高于ws2_32.dll的函数。
  • 底层实现的东西,其稳定性取决于代码使用的合理性,用的好这东西稳定性越高。

PS:

  • 由于使用ntdll的函数,程序的兼容性很难说,本程序于win11,x64测试使用通过。
  • 源码的阅读流程:msafd.e(底层实现)->service+client.e(封装产品)->test.e(测试程序)

附件下载:


msafd.zip (125.66 KB, 下载次数: 249)

评分

参与人数 9好评 +9 精币 +20 收起 理由
飘在空气里 + 1 支持开源~!感谢分享
hardchao + 1 + 2 感谢分享,很给力!~
完玩 + 1 + 2 大佬牛逼
易语言资源网 + 1 + 3 开源精神必须支持~
猪滴寳貝哝 + 1 + 2 感谢分享,很给力!~
勾栏听曲 + 1 + 2 感谢分享,很给力!~
1051496412 + 1 + 2 支持开源~!感谢分享
z博士 + 1 + 2 支持开源~!感谢分享
冰点 + 1 + 5 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 8 天

沙发
发表于 2022-7-6 16:12:22 | 只看该作者   重庆市重庆市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:97% (370/383)

签到天数: 19 天

板凳
发表于 2022-7-6 16:12:28 | 只看该作者   福建省泉州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 18 天

地板
发表于 2022-7-6 16:12:36 | 只看该作者   香港特别行政区*
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:97% (370/383)

签到天数: 19 天

地下
发表于 2022-7-6 16:12:49 | 只看该作者   福建省泉州市
是 超级用户 小号吗 我都看不懂 太强了
回复 支持 反对

使用道具 举报

结帖率:84% (32/38)
6
发表于 2022-7-6 16:53:03 | 只看该作者   江西省宜春市
厉害了   可以学习
回复 支持 反对

使用道具 举报

7
发表于 2022-7-6 16:58:39 | 只看该作者   湖南省常德市
感谢分享
回复 支持 反对

使用道具 举报

8
发表于 2022-7-6 17:06:36 | 只看该作者   福建省福州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

9
发表于 2022-7-6 17:50:30 | 只看该作者   四川省*
帖子又发好东西了
回复 支持 反对

使用道具 举报

10
发表于 2022-7-6 18:00:40 | 只看该作者   福建省厦门市

支持开源~!感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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