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を使用すると、プログラムから着信メッセージを受け取ることができませんでした。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実際には呼び出されました。したがって、メッセージはすでに送信されているはずです。

編集 設定ファイルとプログラムにいくつかの変更を加えた後、すでに問題を解決しましたが、原因がよくわかりません。これは閉じていると考えてください。

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は、targetcomputeridを正しく設定する必要があります。

  3. initiator.block()エンジンを始動して待つには十分です。実行する必要はなくstart()block()両方。

于 2012-07-11T01:46:33.427 に答える