我一直在尝试使用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::toAdmin
和Handler::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
实际上被调用了。所以我认为该消息应该已经发送。
修改 我对配置文件和程序进行了一些更改后,我已经解决了问题,但我不确定是什么导致了它。考虑这个结束。
答案 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之后,问题已经消失了
它似乎是由几个原因造成的:
时间应在间隔中设定。
作为服务器的Mini-FIX应该正确设置targetcomputerid。
initiator.block()
足以启动引擎并等待。无需同时运行start()
和block()
。