C ++ FIX实现->会话无效的用户用户名和SenderCompId必须匹配

问题描述

我正在使用QuickFix在c ++中开发一个机器人,当我发送登录消息时,我得到一个注销响应,提示“用于会话的无效用户用户名和SenderCompId必须匹配”

这是我的消息:

8=FIXT.1.1|9=113|35=A|34=1|49=REM4820|52=20201008-22:22:59.886|56=ROFX|553=User|554=pass|98=0|108=30|141=Y|1137=9|10=054|

(出于隐私原因更改了用户名和通行证)

这是响应:

8=FIXT.1.1|9=135|35=5|34=1|49=ROFX|52=20201008-22:33:00.356|56=REM4820|1128=9|58=Invalid user for session. Username and SenderCompId must match.|1409=1|10=124|

我尝试过的事情:

  • 我已经下载了this python项目,并使用它与Remarkets进行连接以得到相同的结果。 (和发送的登录消息相同)

  • 互换SenderCompID和TargetCompID,就像我在另一篇文章中看到的那样,它可以帮助某人。

  • 使用新密码让新用户尝试不同的帐户,获得相同的结果。

  • 不发送用户名和密码,因为Remarkets文档指出这是没有必要的:主机没有响应

  • 使用SSL配置播放。我正在使用Stunnel4,但我假设如果“用户名和SenderCompId必须匹配”,则接受者必须正在接收并阅读我的消息。

  • 忽略SSL并直接连接:对等重置连接。

我的第一个也是最重要的问题是:我在做什么错了?

一个可能真正有用的问题:

  • 我是否可以使用一个不错的GUI #OrNot连接(OS:ubuntu),并检查FIX消息以查看连接的消息与未连接的消息之间的区别?这些是我使用python的目的,但是我得到了相同的结果。

  • 有人知道再营销替代方案,将其归咎于再营销就像将其归咎于编译器,但我需要检查。

  • 服务器为何回答字段58并给出解释,但有时我会收到“对等方重置连接”?

Client.conf

[DEFAULT]
PersistMessages=Y
ConnectionType=initiator 
ReconnectInterval=60
FileLogPath=./Logs/ 
FileStorePath=./Sessions/
UseLocalTime=Y
UseDataDictionary=Y
AppDataDictionary=conf/spec/FIX50SP2_rofex.xml
TransportDataDictionary=conf/spec/FIXT11.xml
StartTime=00:00:00
EndTime=00:00:00
ValidateUserDefinedFields=N
Resetonlogon=Y
Resetonlogout=Y
DefaultApplVerID=FIX.5.0SP2

[SESSION]
BeginString=FIXT.1.1
SenderCompID=REM4820
TargetCompID=ROFX
SocketConnectHost=127.0.0.1
SocketConnectPort=9876
HeartBtInt=30

TimeInForce=Day
TradingSessionID=1
ScreenLogShowIncoming=Y
ScreenLogShowOutgoing=Y
ScreenLogEvents=Y
logoutTimeout=5
logonTimeout=30
Resetondisconnect=Y
RefreshOnlogon=Y
SocketNodelay=N
ValidateFieldsHaveValues=N
ValidateFieldsOutofOrder=N
CheckLatency=N

解决方法

这绝对是交易对手特定的逻辑问题,而不是FIX协议问题。

让我们得到无与伦比的文字:

Username and SenderCompId must match.

单看该消息,很显然标记49(SenderCompID)和标记553(Username)必须具有相同的值。

是吗?我猜他们没有。尝试将553设置为匹配49。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...