我为一家使用客户端/服务器应用程序的大公司工作。我们最近用可怕的结果推出了这个应用程序。
背景:有2个应用程序 1:接受端口9000上的连接的服务器应用程序。 答 2:客户端应用程序编程为在端口9000上建立与地图服务器的连接。
在我们的Citrix环境中运行客户端应用程序时,我们似乎总是成功启动客户端应用程序64次,然后来自客户端的任何进一步连接都会获得应用程序显示的连接错误对话框。
当接近供应商时,他们声明他们的申请没有任何问题!我们尝试在Windows 2003和2008机器上运行服务器应用程序无济于事。
我们甚至在基本的Win XP桌面环境中设置了相同的结果。
如果64个已建立的连接中的一个被终止,则授予下一个请求连接的客户端。
供应商表示要在每个Citrix盒子上设置一个服务器软件版本,以提供给自己的客户端连接,但这违反了所宣传的软件功能。
我们已尝试过TCPview等程序,但这些程序表明连接已建立,但客户端应用程序显示“无法连接到服务器”消息,单击确定消息后连接将被删除。
总之,有人知道如何确定连接限制在lamen术语中的位置。我能否以某种方式向供应商证明这是他们的软件。
他们提到它是用C ++编写的,我在网上发现了一些关于使用WSAEventSelect用C ++编写的程序的套接字连接限制的线程。
对此问题进行了5天的故障排除!!!疯了!!!
感谢所有Stackoverflow会员/访问者提供了提出此类查询的地方。
答案 0 :(得分:4)
这个主题:how break the 64 limit when using WSAEventSelect似乎指出了解决问题的方法。
但是,您显然无法自行修补软件,因此整个问题将是说服供应商您确切知道问题是什么以及解决方案是什么:)
要证明该软件正在使用WSAEventSelect,您可以使用优秀的Dependancy Walker工具在服务器的exe或dll文件之一中搜索此函数的已使用导入,假设您的最终用户许可允许你做逆向工程这样的事情。
希望您可以通过指向上面的链接来说服供应商。
答案 1 :(得分:0)
嗯,你做过任何老式的调试吗?不只是看TCPView,我的意思是真正深入研究代码并逐步完成,观察返回和错误代码。 64号听起来很像WaitForMultipleObjects()
的{{1}}限制。
答案 2 :(得分:0)
您需要设置代理。然后,您最多可以拥有64个代理,每个代理最多可以接受64个连接,并且您可以拥有4096个连接。
如果您需要更多,那么代理代理......