5

以下のリンクにある取引クライアント アプリケーションを使用して、VPS サーバーの 1 つとブローカー サーバーを接続しています。

http://www.quickfixn.org/tutorial/example-applications .

1 週間の苦労の末、大まかに言えば、やっとブローカーのサーバーに接続できました。

しかし、取引クライアント アプリケーションを実行すると、ログオン段階で次のエラーが発生します。

Unable to write data to the transport connection: An existing connection was forcibly   closed by the remote host

at QuickFix.SocketInitiatorThread.ReadSome(Byte[] buffer, Int32 timeoutMilliseconds) 
in ... SoecketInitiatorThread.cs:line 170 ......

at QuickFix.SocketInitiatorThread.Read() in ... SoecketInitiatorThread.cs:line 80
......

取引クライアント アプリケーションはログオン試行を繰り返し続けていますが、同じエラー メッセージしか表示されません。

もちろん、私のようなこの QuickFix/n エンジンの初心者は、何が問題なのかを理解することができません。私が考えることができる調査の可能性のある領域の 1 つは、私も stunnel プログラム ( https://www.stunnel.org ) に非常に慣れていないため、私の stunnel 証明書が無効である可能性があるということです。Web サイトの指示に従って、ブローカーの IP アドレスを使用して pem 証明書を構成しただけですが、その目的について 100% 確信が持てません。

これが私が「stunnel.conf」ファイルに書いたものです:

[FIXORDER]
client = yes
accept = external ip of VPS : port   eg.(10.160.103.65:22)
connect = broker ip address :port  eg.(102.12.124.9:444)

以下は、stunnel プログラムからログに記録されたメッセージの一部です。

2014.11.26 17:23:44 LOG5[3348]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2014.11.26 17:23:48 LOG5[760]: Service [FIXORDER] accepted connection from x.xx.xx.xxx:xx
2014.11.26 17:23:48 LOG5[760]: s_connect: connected xxx.x.xx.xxx:xxx
2014.11.26 17:23:48 LOG5[760]: Service [FIXORDER] connected remote server from x.xx.xxx.xxx:xxx
2014.11.26 17:23:48 LOG3[760]: SSL_connect: Peer suddenly disconnected
2014.11.26 17:23:48 LOG5[760]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket

組み込みの自己証明書アプリケーションを使用して、上記の「stunnel.conf」ファイルを使用して証明書を作成しました。

ご覧のとおり、私のような初心者にとっては複雑です。この問題に関する考えやヒントは本当にありがたいです。

よろしくお願いします。

敬具。

M

================================================== ================================ 2014/11/27更新

ここでは、xapi1492 からの提案に従ってデバッグ詳細を高く設定した後、Stunnel ログ ファイルからエラー ログを更新しています。

2014.11.27 01:10:46 LOG7[944]: Service [FIXORDER] started
2014.11.27 01:10:46 LOG5[944]: Service [FIXORDER] accepted connection from x.xxx.xxx.xxx:3667
2014.11.27 01:10:46 LOG6[944]: s_connect: connecting xx.x.xx.xx:9002
2014.11.27 01:10:46 LOG7[944]: s_connect: s_poll_wait xx.x.xx.102:9002: waiting 10 seconds
2014.11.27 01:10:46 LOG5[944]: s_connect: connected xx.x.xx.xx:9002
2014.11.27 01:10:46 LOG5[944]: Service [FIXORDER] connected remote server from x.xxx.xxx.xxx:3668
2014.11.27 01:10:46 LOG7[944]: Remote socket (FD=392) initialized
2014.11.27 01:10:46 LOG6[944]: SNI: sending servername: xxx.x.xx.xx
2014.11.27 01:10:46 LOG7[944]: SSL state (connect): before/connect initialization
2014.11.27 01:10:46 LOG7[944]: SSL state (connect): SSLv2/v3 write client hello A
2014.11.27 01:10:46 LOG3[944]: SSL_connect: Peer suddenly disconnected
2014.11.27 01:10:46 LOG5[944]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2014.11.27 01:10:46 LOG7[944]: Remote socket (FD=392) closed
2014.11.27 01:10:46 LOG7[944]: Local socket (FD=380) closed
2014.11.27 01:10:46 LOG7[944]: Service [FIXORDER] finished (0 left)

================================================== ================================ 2014/11/28更新

まだ答えを見つけるのが難しいので、QuickFix クライアント アプリケーションの構成ファイルを提供することにしました。

[DEFAULT]
ConnectionType=initiator
ReconnectInterval=2
FileStorePath=store
FileLogPath=fixlog
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=FIX44.xml
SocketConnectHost= xxx //my vps ip address
SocketConnectPort= xxx //my vps port //specified on stunnel
ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=Y
CheckLatency=N
LogonTimeout=10


# standard config elements

[SESSION]
BeginString=FIX.4.4
SenderCompID= xxx   //my ID
Username= xxx       //my username
Password= xxx       //my password
TargetCompID=FIXORDER
HeartBtInt=30
SocketConnectHost= xxx  //my vps ip address
SocketConnectPort= xxx  //my vps port //specified on stunnel
DataDictionary=FIX44.xml

================================================== ================================ 2014/11/28更新

xpa1492 からの提案を受けて、Borker の IP アドレスとポート番号を SocketConnectHost と SocketConnectPort に配置しました。これは、QuickFix クライアント アプリケーションから取得したログ メッセージです。初期接続はできているようですが、なぜかログオン要求が通っていないのかもしれません。

<event> connecting to xxx (ip address of broker); 
<event> connection succeeded; 
<event> session reset: ResetOnLogon; 
<event> session reset ResetSetNumFlag; 
<outgoing> 8=Fix4.4 ...... ; 
<event> initiated logon request; 
<incoming> 8=FIX4.4 .....; 
<event> received logout request; 
<outgoing> 8=FIX4.4 .....; 
<event> sending logout response;

ブローカーがログアウト要求を送信したときの受信メッセージの詳細。

<incoming> 8=FIX4.4   9=63   35=5   34=1  49=FIXORDER   52=20141128-02:09:00.495   56=TargetCompID(from acceptor standing point of view=SenderID for me)   10=171
4

1 に答える 1

5

FIX サーバーが最初のメッセージ (常にログオン メッセージ) に何か気に入らない場合、接続を切断することはよくあることです。発生しているエラーに基づいて、これがまさに起こっていることです。サーバーに接続し、ログオン メッセージを送信すると、サーバーは接続を切断します。

この問題を解決する正しい方法は、相手側のテクニカル サポートに連絡して、接続が切断された理由を尋ねることです。

これが不可能な場合は、何が問題なのかを試す必要があります。私の経験では、多くの場合、問題はシーケンス番号 (タグ 34) の不一致です。ほとんどのサーバーは、送信した最後のシーケンス番号 (たとえば 1) を維持し、切断後に次の番号 (この例では 2) でログオン メッセージを送信することを期待します。1 から始めて、再接続の間に seq 番号を増やしてみてください。

もう 1 つの考えられる問題は、間違った CompID (Sender または Targer) です。

更新 (sTunnel と SSL 証明書のセットアップ):

SSL 経由で接続していないため、サーバーが接続をドロップする可能性があります... stunnel.conf ファイルは次のようにする必要があります。

; Enable debug (7 is the most verbose output)
debug = 7
output = stunnel.log

[FIXORDER]
client = yes
accept = 127.0.0.1:[port number your client connects to]
connect = [fix server ip]:[fix server port]
cert =  xxx_cert.pem
key = xxx_key.pem

127.0.0.1 または VPS サーバーの IP を指定できますacceptが、127.0.0.1 を選択することをお勧めします。その後、Fix クライアントは 127.0.0.1 (sTunnel がリッスンする場所) に接続することもできます。

于 2014-11-27T00:38:24.193 に答える