碰到一个很妖的问题,最后请教一位高手把问题定位到:

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: 为什么报网络原因发送失败,但连接却成功?相关推荐

  1. mysql 频繁连接中断_记一次网络原因导致的mysql连接中断问题(druid)

    date: 2018-04-19 21:00 tag: java,mysql,exception,mat,调试,jvm 线上系统出现一个诡异的bug,通过heap dump分析 分析: 通过日志确认系 ...

  2. 发邮件时提示连接服务器失败,发送邮件时经常出现发送失败或是连接超时什么原因...

    发邮件时出现邮件发送失败,邮件连接超时的问题主要可能的原因是 你发送的邮件由于包含了过大的附件 超过了对方邮箱服务器的限制大小 这种情况尤其是在给国外邮件地址发送时容易出现我也遇到过 给一土耳其的邮件 ...

  3. 邮件发送失败原因服务器连接超时,我在发送邮件时经常出现发送失败或是连接超时的情况?...

    主要可能的原因是 你发送的由于包含了过大的附件 超过了对方邮箱服务器的限制大小 这种情况尤其是在给国外地址发送时容易出现  我也遇到过  给一土耳其的地址发送时就失败过  他们的服务器限制大小不能超过 ...

  4. 网络邻居访问失败, 提示‘连接失败‘

    台式电脑是WIN10系统,已共享了一个文件夹,另一台台式电脑也是WIN10系统,可以通过账户密码访问上面那台共享文件,但用荣耀手机上的文件管理中的网络邻居访问共享文件时,只能看到共享电脑名,输入用户名 ...

  5. mysql tcp ip 连接失败_mysql连接不成功解决方法汇总

    数据库连接不成功: 报错信息:ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.5' (111) 1,可能网络连接问, ...

  6. 短信验证码发送失败的常见原因有哪些?

    短信验证码现在几乎已成为互联网各行业的标配所在,在账户注册.密码修改.支付确认等方面发挥着重要的作用.目前通过短信验证码接口接入第三方短信验证码平台的短信服务,99%以上的用户基本上都可以在几秒钟之内 ...

  7. 短信营销时短信发送失败的原因有哪些?

    短信营销已经成为一种新型的营销方式,具有发送精准.到达率高.成本低等优点.短信平台有很多人用过,但是在实际操作中,很多人会遇到自己辛苦编辑的短信内容却发送不出去/失败的情况,这到底是什么原因呢? 1. ...

  8. 彩信发送失败原因是什么?如何解决?

    彩信发送失败的原因: 1.内容原因. ①不能有敏感词.如何说你要发送的彩信文字里面有敏感词,就会直接导致彩信发送失败.比如投资.利润等敏感词,在后台时会被直接屏蔽. ②格式不正确.格式错误也会导致彩信 ...

  9. 短信验证码总是发送失败是什么原因?

    有些用户在使用某产品时可能会出现短信验证码收不到的情况,同事之前也遇到过这样的情况,连续发送多次依然收不到短信.那么短信验证码为什么会发送失败.原因有哪些呢.#短信验证码安全 现在短信验证码服务在各种 ...

  10. 解决QQ群、讨论组上传文件,由于网络原因上传失败?

    最近qq上传群文件老是失败,但是同事他们可以,目前已经解决QQ群.讨论组上传文件,由于网络原因上传失败?,做法如下: 输入regedit,打开注册表,然后找到这个位置HKEY_CURRENT_USER ...

最新文章

  1. zend studio for Eclipse注册码及汉化
  2. php mssql image,php5连接mssql2005数据库表中的image字段图片显示
  3. 浅谈最近发布的金融行业多方安全计算的技术标准
  4. 2020 年最全 Python 面试题汇总 (一)
  5. DataSource--DBCP--C3P0--DBUtils
  6. CodeForces - 1300D Aerodynamic(几何+思维)
  7. java中类图概念,程序员眼中的UML(4)--类图释疑之一,Attribute和Property之区别
  8. 鸿蒙系统适配开发,捕获科技拟建立鸿蒙开发组 为区块链钱包客户适配鸿蒙系统做筹备...
  9. 前端学习(2919):v-bind属性绑定
  10. Windows Phone 用WebBrowser加载HTML页面
  11. Anaconda使用pyinstaller打包exe程序体积过大
  12. 图谱论(Spectral Graph Theory)基础
  13. 手写Spring框架
  14. python 进化树_Python ete3有没有一种方法来扩展系统进化树的分支?
  15. Ubuntu 下Rhythmbox播放器中文乱码解决办法
  16. python时间序列分析包_python关于时间序列的分析
  17. LDAP服务器不支持chap认证,终端使用EIA进行PEAP-GTC认证失败的原因分析
  18. 11.3 树的遍历:LDR,LRD,VLR 相关代码
  19. PHP画好看的图,HTML5画一个简单呢好看的电路图
  20. mysql 时间戳转换为时间_将MYSQL数据库里的时间戳转换成时间

热门文章

  1. ASP.NET MVC和jQuery系列一:入门篇
  2. ubuntu7.10下配置java 6和mysql
  3. 开源中国 OsChina Android 客户端源码分析(12)清理缓存
  4. 开坑,写点Polymer 1.0 教程第2篇(上)——hello world篇
  5. HDU 2258 Continuous Same Game
  6. linux内存管理之分段分页机制
  7. [BZOJ4300]绝世好题
  8. hasChildNodes()
  9. 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构
  10. [转载]c# winform 获取当前程序运行根目录