3

私はPHPソケットとFIXプロトコルのかなり基本的な知識を持っています。サーバーに接続して通貨価格を取得できるアカウントを持っています。

私はこのコードを適応させて、リモートサーバーから何を受け取ったかを接続して把握しました。

$host = "the-server.com";
    $port = "2xxxx";

    $fixv = "8=FIX.4.2";
    $clid = "client-name";
    $tid = "target-name";

    $fp = fsockopen($host, $port, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "$fixv|9=70|35=A|49=$clid|56=$tid|34=1|52=20000426-12:05:06|98=0|108=30|10=185|";
        echo "\n".$out."\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo ".";
            echo fgets($fp, 1024);
        }
        fclose($fp);
    }

そして、私は何も返されません。ランダムなものを使用するとエラーが発生するため、ホストは良好です。送信しているメッセージが応答を生成していませんか?

私はGoogleで物事を見つけるのがあまり得意ではないかもしれませんが、phpでこれを行う方法についての簡単なチュートリアルを見つけることができませんでした(少なくともfixとphpを組み合わせたものは何もありません)。

どんな助けでも大歓迎です。

4

1 に答える 1

4

FIX 区切り文字は実際には では'\001'ない'|'ため、送信時に置き換える必要があります。

あなたのためのいくつかのリンク:

編集 0:

あなたが言及した同じウィキペディアの記事から:

メッセージ フィールドは、ASCII 01 文字を使用して区切られます。
...
FIX メッセージの例: 実行レポート (パイプ文字は SOH 文字を表すために使用されます) ...

編集1:

さらにいくつかのポイント:

  • タグ 9 は、タグ 8 (タイプ)、9 (長さ)、および 10 (チェックサム) なしでメッセージの長さを保持します。
  • タグ 10、チェックサムは、すべてのセパレータを含むすべてのメッセージ文字の ASCII 値のモジュロ 256 の合計である必要がありますSOHが、タグ 10 自体は含まれません (TCP の上にチェックサムがあるのはばかげていますが、...)
于 2011-08-09T21:04:28.833 に答える