提示:如有任何疑问可在下方留言或者私信

文章目录

  • 前言
  • 一、分析
  • 二、代码实现
  • 总结

前言

之前有个客户要求说自己服务器是通过DDE(UniversalDDEConnector)获取别人的MT4行情提供给自己平台的,现在想自己去实现一个DDE 达到不从MT4客户端获取行情,而是其他某平台获取行情。


提示:如有任何疑问可在下方留言或者私信

一、分析

之前没有分析过DDE,所以首先抓包看下他与MT4之间是怎么通讯的有没有加密等

可以看到数据没有加密都是明文传输,这样就简单了,他的流程是:当MT4选择连接DDE的行情插件后,MT4会连接插件中设置的ip和端口也就是dde,MT4连接DDE之后,DDE会首先发送

> Universal DDE Connector 9.00
> Copyright 1999-2008 MetaQuotes Software Corp.
> Login:

MT4返回用户名

> Password:

MT4返回密码。
DDE验证通过后则成功连接
然后DDE返回全部品种的数据给MT4,有个注意的地方是DDE每隔几秒会发送一个心跳包给MT4

> Ping

这样两边的通讯就建立完成了,比想象的要简单

二、代码实现

这种要求高的程序还是在linux上实现比较好,网络框架我使用的是swool,比较成熟的框架比自己实现要稳定。具体使用方法可自行百度
代码

//存储已经插入的fd
$redis = new Redis();
$redis->connect("127.0.0.1",6379);$table = new swoole_table(1024);
$table->column('msg', swoole_table::TYPE_STRING, 255);
$table->create();
$serv = new swoole_server("0.0.0.0", 2222);
$serv->set(array('worker_num' => 4,    //开启两个worker进程
));
$serv->on('connect', function ($serv, $fd) use ($redis){echo "connect:" . $fd;if($fd == 1){ $timer_id =  swoole_timer_tick(30000,function($timer_id) use ($redis,$serv) {echo "2s , timerId :{$timer_id} \n";$fdlist = $redis->smembers("fdlist");foreach($fdlist as $k=>$v){print_r($v);  $serv->send( $v,"> Ping\r\n");} }); }$fdinfo = $serv->getClientInfo($fd);$address = $fdinfo['remote_ip'];if($address != "127.0.0.1"){$serv->send( $fd, "> Universal DDE Connector 9.00\r\n> Copyright 1999-2008 MetaQuotes Software Corp.\r\n> Login: " );}
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) use ($redis){//获取发消息的客户端ip$fdinfo = $serv->getClientInfo($fd);$address = $fdinfo['remote_ip'];file_put_contents("/www/wwwroot/default/log.txt","==".$data."==\r\n",FILE_APPEND);if($data == "qqq\r\n"){//如果发过来的是账号密码//则不予回复echo "qqq\r\n";$serv->send( $fd, "> Password: " );}if($data == "zzz\r\n"){echo "zzz\r\n";$serv->send( $fd, "> Access granted\r\n" );$redis->sadd("fdlist",$fd);} $fdlist = $redis->smembers("fdlist");if($address == "127.0.0.1"){unset($fdlist[$fd]);} foreach($fdlist as $k=>$v){$serv->send( $v,$data);}
});
//监听连接关闭事件
$serv->on('close', function ($serv, $fd) use ($redis) {echo "close........";$redis->srem("fdlist",$fd);
});
//启动服务器
$serv->start();

这里我还一个程序就是给上面自己的DDE提供数据的程序,这个程序是获取某平台的数据发送给DDE,DDE在返回给MT4,这里主要研究DDE的通讯流程,就不展示其他的程序了,有需要可以留言或私信。


总结

提示:这个程序实现起来难度不大,只是记录一个分析的过程,希望对你正在做的事情有所帮助。
如有任何疑问可在下方留言或者私信

MT4开发 之开发自己的数据源系统(dde UniversalDDEConnector )相关推荐

  1. 搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统

    搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统 场景 可行性分析 搭建Spring Boot集成 ...

  2. 用什么服务器开发小程序,开发小程序用什么服务器系统

    开发小程序用什么服务器系统 内容精选 换一换 按照翻译方式的不同,高级语言通常可以分为两类:一类是编译翻译,一类是解释翻译,分别对应着编译型语言和解释型语言.编译型语言典型的如C.C++语言,都属于编 ...

  3. 通用权限管理系统组件 (GPM - General Permissions Manager) 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱...

    为什么80%的码农都做不了架构师?>>>    权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱 Ψ吉日嘎拉 采用通用权限管理系统,这些烦恼就 ...

  4. 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 基于结构光测量技术和3D物体识别技术开发的机器 ...

  5. 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统

    简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...

  6. 用“找回iPhone”的方法追踪新冠接触者,MIT谷歌苹果开发蓝牙新冠传播追踪系统...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 就在我国抗疫形势逐渐明朗,全国有序恢复正常之时,大洋彼岸的美国日子却一天比一天难过了. 由于美国人十分看重个人自由和隐私,导致严格的限行隔 ...

  7. 嵌入式Linux裸机开发(六)——S5PV210时钟系统

    嵌入式Linux裸机开发(六)--S5PV210时钟系统 一.时钟系统简介 外设工作需要一定频率的时钟,这些时钟都由系统时钟提供.系统时钟一般由外部低频24MHZ晶体振荡器通过锁相环电路PLL倍频产生 ...

  8. PHP开发的爱情盲盒交友系统网站源码

    简介: PHP开发的爱情盲盒交友系统网站源码 网盘下载地址: http://kekewangLuo.net/1ytQwVyoh8o0 图片:

  9. 导览系统定制开发_联联周边游系统源码定制开发平台方案

    点击上方关注我们! 联联周边游系统开发,找[金生157威6875店2419同号]联联周边游软件开发,联联周边游系统APP开发,联联周边游系统小程序开发,联联周边游系统开发模式,联联周边游系统平台开发, ...

  10. AgileEAS.NET平台开发Step By Step系列-药店系统-索引

    介绍 为了方便大家查看和学习AgileEAS.NET敏捷开发平台相关的文章,特别整理一个索引,我会尽快的完善相应的系列,本系列将会已"药店系统"为 例,从需求-最后的部署全过程的使 ...

最新文章

  1. ArrayList的内存泄露
  2. JavaWeb中连接数据库的一般方式与通过JNDI连接池的方式
  3. 致所有IT工程师的信(网络工程师的发展方向)
  4. 简述Python的Numpy,SciPy和Pandas,Matplotlib的区别
  5. C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  6. 用rem来做响应式开发
  7. 简单解决Ubuntu修改locale的问题
  8. php smarty2 框架,PHP CodeIngiter 2.x.x 框架与 Smarty 3.x.x 模板引擎整合
  9. RabbitMQ小笔记
  10. EKF_SLAM一般过程
  11. 虚拟均衡器:Producers Vault Baby Bass for Mac
  12. 台式计算机硬盘的安装位置,台式电脑分别如何安装SSD(固态硬盘)详细图文教程...
  13. Foobar2000使用学习
  14. 幽灵蛛(pholcus)(四)--正则表达式学习资料
  15. 数据分析:你的城市复工了吗?
  16. arch模型的思路_ARCH模型课件.ppt
  17. iOS 自定义无限循环滚动广告动画控件
  18. (仿微信Android)IM聊天+抢红包+直播+朋友圈源码发布了
  19. 硕士毕业论文写不出来导致严重焦虑,怎么办?
  20. onedrive手机登录出现 无法登录,管理员需要为你分配可执行此操作的SharePoint和OneDrive许可证

热门文章

  1. video标签和source标签
  2. 论文笔记:SAIN: Self-Attentive Integration Network for Recommendation(SIGIR 2019)
  3. 互动多媒体 Unity 拼接屏 项目分析
  4. 沁恒三模键盘方案测试体验
  5. 在阿里云服务器上安装常用应用
  6. ppt如何替换其他mo ban_一次性解决PPT初学者的20个常见问题,赶紧收藏
  7. 我是火枪,我想打dps
  8. 让大疆灵眸 OSMO 口袋云台相机支持直播
  9. 如何撰写和发表SCI论文
  10. 双向可控硅晶片光耦(TLP160J TLP260J TLP525G)基本原理及应用实例