CTP: 为什么报网络原因发送失败,但连接却成功?

2023-11-08

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

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 second
    let 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),再登陆。这个更安全。[推荐]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CTP: 为什么报网络原因发送失败,但连接却成功? 的相关文章

随机推荐

  • 全国城市房价分析(pandas)

    中国主要城市的房价可以从https www creprice cn rank index html获取 该网页中会显示上一个月的房价排行情况 先复制前10个城市的数据 然后使用pd read clipboard 读取 我们来分析一下该月的数
  • 28个python爬虫项目,看完这些你离爬虫高手就不远了

    互联网的数据爆炸式的增长 而利用 Python 爬虫我们可以获取大量有价值的数据 1 爬取数据 进行市场调研和商业分析 爬取知乎优质答案 筛选各话题下最优质的内容 抓取房产网站买卖信息 分析房价变化趋势 做不同区域的房价分析 爬取招聘网站职
  • 数据库事务的隔离等级

    数据库的事务隔离级别有4个 由低到高依次是Read uncommitted Read Committed Repeatable read Serializable 这四个级别可以逐个解决脏读 不可重复读 幻读等问题 Tables 脏读 不可
  • 5G房子将会进一步带来更多的就业机会

    此次微信和支付宝面向市场推出的刷脸支付的产品 在安全上做了极大的努力 通过数据层层加密 保障了商户的资金安全 同时也为消费者带来了全新的消费体验 减少了商户在高峰期人流量分流的问题 与传统的聚合二维码收银台形成了优势互补的作用 通过微信和支
  • 如何使用sort快速排序

    试题 算法提高 快速排序 提交此题 评测记录 资源限制时间限制 1 0s 内存限制 256 0MB问题描述 用递归来实现快速排序 quick sort 算法 快速排序算法的基本思路是 假设要对一个数组a进行排序 且a 0 x 首先对数组中的
  • Unity3d + UGUI 的多分辨率适配

    原文地址 http blog csdn net dingkun520wy article details 49471789 1 Canvas的属性配置 2 Canvas Scaler
  • Spark Streaming的流数据处理和分析

    一 Spark Streaming 1 Spark Streaming概述 1 1 实时数据处理的动机 以前所未有的速度创造数据 来自移动 网络 社交 物联网的指数数据增长 联网设备 2012年为9B 到2020年将达到50B 到2020年
  • 2023年Python面试题_Python基础_42道

    什么是 Python Python 是一种编程语言 它有对象 模块 线程 异常处理和自动内存管理 可以加入其他语言的对比 Python 是一种解释型语言 Python 在代码运行之前不需要解释 Python 是动态类型语言 在声明变量时 不
  • linux中mariadb数据库升级

    前言 在使用mariadb的数据库 mysql有同样的问题 过程中 发现老版本的数据库的一些问题 1 自增字段是在内存里的 数据库重启后就会丢失 新的自增字段是根据表中已有数据的最大值 1 数据表的如果没有记录 自增字段又从头开始了 2 数
  • Python入门自学进阶-Web框架——23、DjangoAdmin项目应用-定制页面

    一 单个菜单页面实现 类似DjangoAdmin中点击一个管理表打开的样子 以客户首页为例 这里cust index就是路由表中的name字段的值 即别名 对应的就是路由项中的cust html 即对应视图函数cust index 视图函数
  • CREATE TABLE 语句

    CREATE TABLE 语句用于创建数据库中的表 语法 CREATE TABLE table name column name1 data type size column name2 data type size column name
  • fwknop SPA服务端源码编译

    fwknop 源码编译 1 背景介绍 2 源码编译 2 1 源码获取 2 2 环境介绍 2 3 对git克隆下来的代码直接进行编译 2 4 挑选出C 部分的服务端进行编译 1 背景介绍 fwknop实现的是SPA Single Packet
  • 初识 flex & bison

    基本概念 flex 和 bison 经常结合使用 分别用于词法分析和语法分析 词法分析器 flex flex 用于生成词法分析器或者说是扫描器 scanner 它将输入的文本分解为称为 tokens 的序列 每个 token 都有一个特定的
  • VSCode下载慢问题

    进入VSCode官网根据自己的电脑选择相应的版本后下载 但是下载过程超级慢 有时候下载一半断开 让人有点崩溃 解决方法 改为国内镜像 打开谷歌浏览器下载内容 找到正下载的vscode 点击上图的链接 跳转到新的窗口 将其路径中的az7642
  • Vue 项目 使用 lang=“scss“ 已经有了 sass-loader 依赖 还是报错

    原因可能是 sass loader 版本太高的原因 安装7 3 1版本 即可解决问题 cnpm install sass loader 7 3 1 save dev
  • element中el-input组件限制输入条件(数字、特殊字符)

    1 只能输入纯数字
  • Spring MVC+Jquery Ajax 前后台传递Json对象

    关于Spring MVC3 X 接收和返回Json 最近开发项目时遇到此问题 解决后 特做下备忘 1 javabean 1 Content java public class Content implements Serializable
  • redis 安装

    一 Redis 介绍 二 Redis 下载 Redis下载官方下载地址 https redis io download 选择需要的版本 三 Redis 安装 将下载好的源文件上传到服务器 以下默认安装路径在 usr local目录下 使用最
  • 计算机应用在学科整合中的课题研究,多媒体计算机技术与学科教学的整合(课题研究阶段总结)...

    多媒体计算机技术与学科教学的整合 2014 12 2015 5 子长县职业教育中心 白勰 在承担课题研究任务以来 由于领导的高度重视 学校采取了切实可行的工作措施 同时也做了大量务实的工作 使课题研究能够顺利地推进 达到了预期效果 为了使课
  • CTP: 为什么报网络原因发送失败,但连接却成功?

    碰到一个很妖的问题 最后请教一位高手把问题定位到 md is logining ptr 0x7f0318027d80 init gt init lt get api version v6 5 1 20200908 10 25 08 get