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を使用すると、プログラムから着信メッセージを受け取ることができませんでした。2つのMini-FIXを開いてみました。1つはサーバーとして、もう1つはクライアントとして、正常に通信します。そして、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
実際には呼び出されました。したがって、メッセージはすでに送信されているはずです。
編集 設定ファイルとプログラムにいくつかの変更を加えた後、すでに問題を解決しましたが、原因がよくわかりません。これは閉じていると考えてください。