通过CAsyncSocket的TCP连接无效:onConnect从未调用

时间:2017-01-19 10:07:12

标签: c# winforms sockets visual-c++ service

现有方案如下所述。

我们的应用程序在Client Server架构上运行;客户端使用VC ++开发,Server使用C#开发 在服务器端,有两个exe运行(myServer1.exe -Windows服务和myServer2.exe -Windows应用程序)。 myServer2.exe通过TCP套接字连接与myServer1.exe进行通信。
在客户端,exe(myApp1.exe -Windows Service)基于计算机中存在的用户会话运行另一个exe(myUser.exe for所有用户会话)。每个myUser.exe实例都通过PIPE通信与myApp1.exe进行通信。并且myApp1.exe还通过另一个TCP通信与myServer1.exe进行通信。

新方案。

我们现在正在myServer2.exe(服务器应用程序-C#)中以侦听模式创建TCP套接字。 myUser.exe(客户端应用程序-VC ++)正尝试使用CAsyncSocket通过TCP连接连接到myServer2.exe。但框架调用(OnConnectOnReceiveOnClose)没有发生。

套接字创建 - Create(0,SOCK_STREAM); // CAyncSocket

套接字连接 - Connect("ServerIP", "ServerPort"); // CAsyncSocket

注意:当我们将套接字创建和连接功能移动到基于Windows服务的exe(myApp1.exe)时,连接正常,OnConnect OnReceive和OnClose正在发生。

为什么在myApp1.exe中myUser.exe中没有发生对OnConnect的框架调用

1 个答案:

答案 0 :(得分:0)

您的OnConnect方法未被调用,因为当您在myApp.exe中拥有它时,myUser.exe中可能您没有消息循环

错误代码10035是WSAEWOULDBLOCK,它是'正常情况下,来自MSDN

  

将WSAEWOULDBLOCK报告为结果是正常的   在一段时间内,在非阻塞SOCK_STREAM套接字上调用connect   必须经过才能建立联系。

所以不要担心。如果您有一个消息循环,则在Connect调用之后,OnConnect方法最终会在特定时间调用,但结果成功或错误代码。

另请参阅codeprojectSO