我正在使用下面此链接上的交易客户端应用程序在我的一个VPS服务器和代理服务器之间建立连接。
http://www.quickfixn.org/tutorial/example-applications。
经过一周的奋斗,我终于松散地与经纪人的服务器建立了联系。
但是,当我运行交易客户端应用程序时,在登录阶段我收到此错误:
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引擎上有像我这样的新手,我真的无法弄清楚出了什么问题。我能想到的一个可能的调查领域是我的stunnel证书可能无效,因为我对stunnel程序(https://www.stunnel.org)也很新。我只是按照网站上的说明配置了经纪人的IP地址,但我并不是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
我使用上面的#st; stunnel.conf"使用内置自我证书应用程序的文件。
如你所见,对我这样的新手来说有点复杂,对这个问题的任何想法或提示都会非常感激。
提前非常感谢。
亲切的问候。
中号
=============================================== =================================== 2014年11月27日更新
这里我从Stunnel日志文件更新我的错误日志后,我将调试详细设置为高从xapi1492获取建议。
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)
=============================================== =================================== 更新于28/11/2014
仍然难以找到答案,所以我决定为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
=============================================== =================================== 更新于28/11/2014
根据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
答案 0 :(得分:4)
FIX服务器在他们不喜欢您的第一条消息(始终是登录消息)时放弃连接是很常见的。根据您获得的错误,这正是发生的事情 - 您连接到服务器,发送登录消息,然后服务器断开连接。
解决问题的正确方法是联系另一端的技术支持,并询问他们为什么放弃连接。
如果这不可行,您需要尝试可能出错的地方。根据我的经验,问题通常是序列号不匹配(标签34)。大多数服务器将保留您发送的最后一个序列号(例如1),并且在断开连接后,您希望使用下一个号码(本例中为2)发送您的登录消息。尝试从1开始并在重新连接之间递增seq数。
另一个可能的问题是错误的CompID(发件人或目标)。
更新(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
请注意,accept
可以是127.0.0.1或您的VPS服务器的IP,但127.0.0.1是首选。然后,您的Fix客户端也可以连接到127.0.0.1(sTunnel侦听的地方)。