QuickFIX Initiator无法发送消息

时间:2012-07-02 08:48:15

标签: c++ quickfix

我一直在尝试使用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应该已收到程序发送的toAdmin消息8=FIX.4.4|9=55|35=5|34=1|49=CLIENT|52=20120702-08:29:25.334|56=SERVER|10=115。 开始时间和结束时间似乎很奇怪,但toAdmin实际上被调用了。所以我认为该消息应该已经发送。

修改  我对配置文件和程序进行了一些更改后,我已经解决了问题,但我不确定是什么导致了它。考虑这个结束。

2 个答案:

答案 0 :(得分:2)

您在问题中发布的FIX消息是LOGOUT消息(35 = 5),并且发起与此类消息的连接非常奇怪。我希望第一条消息是LOGON(35 = A)。尝试在每次登录时重置序列号,在config中添加以下行:

ResetOnLogon=Y

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

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

答案 1 :(得分:0)

在我操作配置文件和Mini-FIX之后,问题已经消失了 它似乎是由几个原因造成的:

  1. 时间应在间隔中设定。

  2. 作为服务器的Mini-FIX应该正确设置targetcomputerid。

  3. initiator.block()足以启动引擎并等待。无需同时运行start()block()