1

我一直在尝试使用 QuickFIX 来设置客户端。这是来自 QuickFIX 站点的示例,如下所示:

int main( int argc, char** argv ) {
  try
  {
    if(argc < 2) return 1;
    std::string fileName = argv[1];
    FIX::SessionSettings settings(fileName);
    Handler application;
    FIX::FileStoreFactory storeFactory(settings);
    FIX::FileLogFactory logFactory(settings);
    FIX::SocketInitiator initiator(application, storeFactory, settings, logFactory /*optional*/);
    initiator.start();
    cout << "Started.\n";
    initiator.block();
    cout << "Stopped.\n";
    return 0;
  }
  catch(FIX::ConfigError& e)
  {
    std::cout << e.what();
    return 1;
  }
}

我定义了Handler实现Application类。配置文件如下所示:

# default settings for sessions
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=60
SenderCompID=CLIENT
FileLogPath=.
FileStorePath=.
DataDictionary=D:\Program Files\quickfix\spec\FIX44.xml

# session definition
[SESSION]
# inherit ConnectionType, ReconnectInterval and SenderCompID from default
BeginString=FIX.4.4
TargetCompID=SERVER
HeartBtInt=30
SocketConnectPort=6523
SocketConnectHost=127.0.0.1
StartTime=8:00:00
EndTime=23:00:00

运行时,Handler::toAdminHandler::onCreate被调用,然后block功能块。但是使用小型 FIX 应用程序 Mini-FIX 作为服务器,我无法从程序中获取任何传入消息。我试过打开两个 Mini-FIX,一个作为服务器,一个作为客户端,它们之间的通信很好。而且我已经确保 ID 和监听端口是正确的。那么会有什么问题呢?Mini-FIX 应该已经收到了程序发送的toAdminMessage 。8=FIX.4.4|9=55|35=5|34=1|49=CLIENT|52=20120702-08:29:25.334|56=SERVER|10=115开始时间和结束时间看起来很奇怪,但toAdmin实际上被调用了。所以我认为消息应该已经发送了。

编辑 在对配置文件和程序进行了几次更改后,我已经解决了这个问题,但我不太确定是什么原因造成的。认为这是封闭的。

4

2 回答 2

2

您在问题中发布的 FIX 消息是 LOGOUT 消息(35=5),用这种消息发起连接很奇怪。我希望第一条消息是 LOGON (35=A)。尝试在每次登录时重置序列号,在配置中添加以下行:

ResetOnLogon=Y

在 QuickFIX 发行版中还有一个小型服务器(执行程序),您可以使用它来测试您的客户端。请在此处找到服务器:

http://www.quickfixengine.org/quickfix/doc/html/examples.html

于 2012-07-03T04:44:32.920 回答
0

在我操作了配置文件和 Mini-FIX 之后,问题就消失了。
似乎是由几个原因引起的:

  1. 时间应设置在区间内。

  2. 充当服务器的 Mini-FIX 应正确设置目标计算机 ID。

  3. initiator.block()足以启动引擎并等待。无需运行start()block()两者兼而有之。

于 2012-07-11T01:46:33.427 回答