CTP: 为什么报网络原因发送失败,但连接却成功?
碰到一个很妖的问题,最后请教一位高手把问题定位到:
md is logining!
ptr :0x7f0318027d80
init ->
init <-
get api version :"v6.5.1_20200908 10:25:08"
get trade day :"20210222"
get_login_field ->
login =>
req_user_login return => n :-1
行情登陆失败! => 网络原因发送失败
subsribe_marketdata=>
订阅标的 : ["IF2103", "au2103", "m2103"]
行情订阅失败: 网络原因发送失败!
join->
CtpMdSpi_Rust_OnFrontConnected ->
desk => on_front_connected
CtpMdSpi_Rust_OnFrontConnected <-
spi => 前置连接成功! MdSpiOnFrontConnected
从上面可以看到,spi收到回报,表明已经连接成功,但是在mdapi登陆时,却一直报错!这个感觉很奇怪。
问题出在 “刚刚注册完前置就登录,而是要等拿到连接回报再登录”
内在逻辑:
注册前置成功后,就会收到on_front_connected,如下:
CtpMdSpi_Rust_OnFrontConnected ->
desk => on_front_connected
CtpMdSpi_Rust_OnFrontConnected <-
spi => 前置连接成功! MdSpiOnFrontConnected
但如果login登录不成功,就可能会收到“网络原因发送失败”的消息。
注册前置(初始化)和登录是两个不同的异步事件。正常情况是注册前置(初始化)成功,再安排登录。
方案一:
1、在前置注册后,sleep 5秒,等待前置注册(初始化)完成。这个更简单,粗暴。【谨慎】
但是,5秒设置可能不合适,你可以打开快期的端口,也登陆一下,网络是否连接成功。不行试一下SIMNOW账户。
以下以Rust封装接口代码为例:
println!("md is logining!");let flow_path = ::std::ffi::CString::new("").unwrap();let mut md_api = QuoteApi::new(flow_path, false, false); md_api.register_spi(Box::new(my_desk));let front_add = std::ffi::CString::new(md_front).unwrap(); md_api.register_front(front_add); md_api.init();let version = md_api.get_api_version();println!("get api version :{:?}",version);let trade_day = md_api.get_trade_day();println!("get trade day :{:?}",trade_day);std::thread::sleep(std::time::Duration::from_secs(5));// 注册前置成功后,再登陆 wait 5 secondlet mut login_field = get_login_field(&acc);let n_login = md_api.login(&mut login_field, 111_i32);
需要说明的是,这种sleep方式并不一定每次可能有效的。事实上是sleep阻塞几秒中,在赌注册前置(初始化)事件正好完成。
2、在spi回调返回连接成功后(on_front_connected),再登陆。这个更安全。[推荐]
CTP: 为什么报网络原因发送失败,但连接却成功?相关推荐
- mysql 频繁连接中断_记一次网络原因导致的mysql连接中断问题(druid)
date: 2018-04-19 21:00 tag: java,mysql,exception,mat,调试,jvm 线上系统出现一个诡异的bug,通过heap dump分析 分析: 通过日志确认系 ...
- 发邮件时提示连接服务器失败,发送邮件时经常出现发送失败或是连接超时什么原因...
发邮件时出现邮件发送失败,邮件连接超时的问题主要可能的原因是 你发送的邮件由于包含了过大的附件 超过了对方邮箱服务器的限制大小 这种情况尤其是在给国外邮件地址发送时容易出现我也遇到过 给一土耳其的邮件 ...
- 邮件发送失败原因服务器连接超时,我在发送邮件时经常出现发送失败或是连接超时的情况?...
主要可能的原因是 你发送的由于包含了过大的附件 超过了对方邮箱服务器的限制大小 这种情况尤其是在给国外地址发送时容易出现 我也遇到过 给一土耳其的地址发送时就失败过 他们的服务器限制大小不能超过 ...
- 网络邻居访问失败, 提示‘连接失败‘
台式电脑是WIN10系统,已共享了一个文件夹,另一台台式电脑也是WIN10系统,可以通过账户密码访问上面那台共享文件,但用荣耀手机上的文件管理中的网络邻居访问共享文件时,只能看到共享电脑名,输入用户名 ...
- mysql tcp ip 连接失败_mysql连接不成功解决方法汇总
数据库连接不成功: 报错信息:ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.5' (111) 1,可能网络连接问, ...
- 短信验证码发送失败的常见原因有哪些?
短信验证码现在几乎已成为互联网各行业的标配所在,在账户注册.密码修改.支付确认等方面发挥着重要的作用.目前通过短信验证码接口接入第三方短信验证码平台的短信服务,99%以上的用户基本上都可以在几秒钟之内 ...
- 短信营销时短信发送失败的原因有哪些?
短信营销已经成为一种新型的营销方式,具有发送精准.到达率高.成本低等优点.短信平台有很多人用过,但是在实际操作中,很多人会遇到自己辛苦编辑的短信内容却发送不出去/失败的情况,这到底是什么原因呢? 1. ...
- 彩信发送失败原因是什么?如何解决?
彩信发送失败的原因: 1.内容原因. ①不能有敏感词.如何说你要发送的彩信文字里面有敏感词,就会直接导致彩信发送失败.比如投资.利润等敏感词,在后台时会被直接屏蔽. ②格式不正确.格式错误也会导致彩信 ...
- 短信验证码总是发送失败是什么原因?
有些用户在使用某产品时可能会出现短信验证码收不到的情况,同事之前也遇到过这样的情况,连续发送多次依然收不到短信.那么短信验证码为什么会发送失败.原因有哪些呢.#短信验证码安全 现在短信验证码服务在各种 ...
- 解决QQ群、讨论组上传文件,由于网络原因上传失败?
最近qq上传群文件老是失败,但是同事他们可以,目前已经解决QQ群.讨论组上传文件,由于网络原因上传失败?,做法如下: 输入regedit,打开注册表,然后找到这个位置HKEY_CURRENT_USER ...
最新文章
- zend studio for Eclipse注册码及汉化
- php mssql image,php5连接mssql2005数据库表中的image字段图片显示
- 浅谈最近发布的金融行业多方安全计算的技术标准
- 2020 年最全 Python 面试题汇总 (一)
- DataSource--DBCP--C3P0--DBUtils
- CodeForces - 1300D Aerodynamic(几何+思维)
- java中类图概念,程序员眼中的UML(4)--类图释疑之一,Attribute和Property之区别
- 鸿蒙系统适配开发,捕获科技拟建立鸿蒙开发组 为区块链钱包客户适配鸿蒙系统做筹备...
- 前端学习(2919):v-bind属性绑定
- Windows Phone 用WebBrowser加载HTML页面
- Anaconda使用pyinstaller打包exe程序体积过大
- 图谱论(Spectral Graph Theory)基础
- 手写Spring框架
- python 进化树_Python ete3有没有一种方法来扩展系统进化树的分支?
- Ubuntu 下Rhythmbox播放器中文乱码解决办法
- python时间序列分析包_python关于时间序列的分析
- LDAP服务器不支持chap认证,终端使用EIA进行PEAP-GTC认证失败的原因分析
- 11.3 树的遍历:LDR,LRD,VLR 相关代码
- PHP画好看的图,HTML5画一个简单呢好看的电路图
- mysql 时间戳转换为时间_将MYSQL数据库里的时间戳转换成时间
热门文章
- ASP.NET MVC和jQuery系列一:入门篇
- ubuntu7.10下配置java 6和mysql
- 开源中国 OsChina Android 客户端源码分析(12)清理缓存
- 开坑,写点Polymer 1.0 教程第2篇(上)——hello world篇
- HDU 2258 Continuous Same Game
- linux内存管理之分段分页机制
- [BZOJ4300]绝世好题
- hasChildNodes()
- 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构
- [转载]c# winform 获取当前程序运行根目录