C# 通过CAsyncSocket的TCP连接不工作:从未调用onConnect

C# 通过CAsyncSocket的TCP连接不工作:从未调用onConnect,c#,winforms,sockets,visual-c++,service,C#,Winforms,Sockets,Visual C++,Service,现有场景解释如下。 我们的应用程序运行在客户机-服务器体系结构上;客户端用VC++开发,服务器用C#开发。 在服务器端,有两个exe正在运行(myServer1.exe-基于Windows服务和myServer2.exe-Windows应用程序)。myServer2.exe正在通过TCP套接字连接与myServer1.exe通信。在客户端,一个exe(myApp1.exe-基于Windows服务)根据计算机中存在的用户会话运行另一个exe(myUser.exe用于所有用户会话)。每个myUser

现有场景解释如下。

我们的应用程序运行在客户机-服务器体系结构上;客户端用VC++开发,服务器用C#开发。
在服务器端,有两个exe正在运行(myServer1.exe-基于Windows服务和myServer2.exe-Windows应用程序)。myServer2.exe正在通过TCP套接字连接与myServer1.exe通信。
在客户端,一个exe(myApp1.exe-基于Windows服务)根据计算机中存在的用户会话运行另一个exe(myUser.exe用于所有用户会话)。每个myUser.exe实例都通过管道通信与myApp1.exe通信。myApp1.exe还通过另一个TCP通信与myServer1.exe通信

新场景。

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

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

套接字连接-
连接(“服务器IP”、“服务器端口”);//CAsyncSocket

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


为什么框架调用OnConnect在myUser.exe中没有发生,而在myApp1.exe中没有发生?

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

错误代码10035是WSAEWOULDBLOCK,对于您的情况来说是正常的,从:

WSAEWOULDBLOCK作为来自的结果报告是正常的 在非阻塞SOCK_流套接字上调用connect,因为 必须经过一段时间才能建立连接

所以别担心。如果您有一个消息循环,则在调用
Connect
后,
OnConnect
方法最终将在某个时间被调用,结果是成功的,或者出现错误代码


另请参见和

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

错误代码10035是WSAEWOULDBLOCK,对于您的情况来说是正常的,从:

WSAEWOULDBLOCK作为来自的结果报告是正常的 在非阻塞SOCK_流套接字上调用connect,因为 必须经过一段时间才能建立连接

所以别担心。如果您有一个消息循环,则在调用
Connect
后,
OnConnect
方法最终将在某个时间被调用,结果是成功的,或者出现错误代码


另请参见和

基本上,您有一个C#windows server应用程序和许多VC++客户端,您希望它们通过TCP进行通信,对吗?共享一些代码现在服务器和客户端之间的通信工作正常。问题是,我想在myUser.exe中创建一个具有发送模式的套接字,myServer2.exe将侦听相同的套接字。但是myUser.exe(VC++)上的通知函数(Onconnect、OnSend等)没有发生。始终获取套接字错误10035(该操作应在以后退出)。但是我们尝试了好几次,仍然得到相同的错误。所以“CAsyncSocket::Connect”总是失败。所以基本上,你有一个C#windows服务器应用程序和许多VC++客户端,你希望它们通过TCP通信,对吗?共享一些代码现在服务器和客户端之间的通信工作正常。问题是,我想在myUser.exe中创建一个具有发送模式的套接字,myServer2.exe将侦听相同的套接字。但是myUser.exe(VC++)上的通知函数(Onconnect、OnSend等)没有发生。始终获取套接字错误10035(该操作应在以后退出)。但是我们尝试了好几次,仍然得到相同的错误。所以“CAsyncSocket::Connect”总是失败。当我们在myApp1.exe(VC++)和myServer2.exe(C#)之间启动TCP通信时,一切都正常。所以我的问题是,到底是什么问题导致了这个问题??@Jose。从myApp1.exe启动时,TCP通信工作正常,而从myUser.exe启动时,TCP通信不工作:对吗?两者都是用VC++编写的。它们是否共享打开TCP连接的相同代码?请参阅我的最新答案是。myApp1.exe和myUser.exe共享相同的VC++代码。当myApp1.exe处于侦听模式时,所有通知都会被触发。但在发送模式下,CAsyncSocket不会触发事件。@Jose。如果您使用同一个类来管理TCP连接,那么使用该类的代码肯定会有所不同。MyApp是服务应用程序,而MyUser是控制台应用程序?无论如何,由于某种原因,您在MyUser中没有消息循环,这就是为什么不触发通知。当我们在myApp1.exe(VC++)和myServer2.exe(C#)之间启动TCP通信时,一切正常。所以我的问题是,到底是什么问题导致了这个问题??@Jose。从myApp1.exe启动时,TCP通信工作正常,而从myUser.exe启动时,TCP通信不工作:对吗?两者都是用VC++编写的。它们是否共享打开TCP连接的相同代码?请参阅我的最新答案是。myApp1.exe和myUser.exe共享相同的VC++代码。当myApp1.exe处于侦听模式时,所有通知都会被触发。但在发送模式下,CAsyncSocket不会触发事件。@Jose。如果您使用同一个类来管理TCP连接,那么使用该类的代码肯定会有所不同。MyApp是一个服务应用程序