我在下面的此链接上使用交易客户应用程序在我的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
......
Run Code Online (Sandbox Code Playgroud)
贸易客户应用程序一直在重复登录尝试,但是,它始终仅获得相同的错误消息。
当然,对于像我这样的新手使用此QuickFix / n引擎,我真的无法弄清楚出了什么问题。我可以想到的一个可能的调查领域是,我对隧道程序(https://www.stunnel.org)也很陌生,因此我的隧道证书可能无效。我只是按照网站上的指示使用代理的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)
Run Code Online (Sandbox Code Playgroud)
这是来自Stunnel程序的已记录消息的一些记录:
2014.11.26 17:23:44 LOG5[3348]: Connection reset: 0 byte(s) sent to SSL, 0 …Run Code Online (Sandbox Code Playgroud) 我已将我的用户名和密码放在 FIX 配置文件中。所以我必须认为我应该能够从一些内部变量中获取用户名和密码,比如 session 变量或 SessionSetting 变量或 session.SessionDataDictionary 或其他一些变量。但是,我没有找到任何直接的解决方案来从内部变量中获取用户名和密码。
[SESSION]
BeginString=FIX.4.4
SenderCompID= xxxxx
Username= xxxx
Password= xxxx
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,这可能是非常可行的。但是,没有人建议这样做,或者我没有看到有人在谷歌上这样做。我从谷歌找到的唯一代码是这个。
String username = sessionSettings.getString(sessionId, "Username"); //only works for Java version of QuickFix
Run Code Online (Sandbox Code Playgroud)
然而,以上代码仅适用于 Java 版本的 QuickFix,并且此方法在 QuickFix 的 DotNet 版本(即 QuickFix/n)中不可用
getString(sessionId, "Username");
Run Code Online (Sandbox Code Playgroud)
我希望使用 QuickFix/n 为 FIX 4.4 实现类似的结果。如果有人熟悉 QuickFix,这可能是一项非常简单的任务。我将非常感谢您的提示或建议。我不介意你对 Java 或 C++ 版本有什么想法,因为它们都非常相似。我只需要知道这个用户名和密码存储在哪个变量中,以及如何使用 Csharp 代码获取它。
提前致谢。