2017-01-19 31 views
0

現有方案如下所述。通過CAsyncSocket的TCP連接不起作用:onConnect從未調用

我們的應用程序運行在Client Server架構上;客戶端使用VC++開發,服務器使用C#開發。
在服務器端有兩個exe的運行(myServer1.exe - 基於Windows服務,和myServer2.exe - Windows應用程序)。 myServer2.exe通過TCP套接字連接與myServer1.exe進行通信。
在客戶端,一個exe(myApp1.exe - 基於Windows服務)根據機器中存在的用戶會話(所有用戶會話的myUser.exe)運行另一個exe。每個myUser.exe實例都通過PIPE通信與myApp1.exe進行通信。並且myApp1.exe也通過另一個TCP通信與myServer1.exe通信。

新情況。

我們現在在myServer2.exe(服務器應用程序-C#)的監聽模式下創建一個TCP套接字。 myUser.exe(客戶端應用程序-VC++)嘗試通過使用CAsyncSocket通過TCP連接來連接到myServer2.exe。但框架調用(OnConnect,OnReceiveOnClose)沒有發生。

插槽creation- Create(0,SOCK_STREAM); // CAyncSocket

插座連接 - Connect("ServerIP", "ServerPort"); // CAsyncSocket

注:當我們移動插座創建和連接功能集成到Windows服務的基於EXE(myApp1.exe),連接工作正常,爲onConnect的onReceive和OnClose正在發生。

爲什麼框架調用OnConnect沒有發生在myUser.exe中,而在myApp1.exe是?

+0

所以基本上,你有一個C#的Windows Server應用程序和許多VC++客戶,你希望他們通過TCP右溝通?分享一些代碼 – salvolds

+0

截至目前,服務器和客戶端之間的通信工作正常。問題是我想在發送模式下在myUser.exe中創建一個套接字,並且myServer2.exe將會聽到相同的信息。但myUser.exe(VC++)上的通知函數(Onconnect,OnSend等)不會發生。總是得到套接字錯誤10035(該操作應該在稍後停用)。但我們嘗試了幾次,仍然得到相同的錯誤。所以'CAsyncSocket :: Connect'總是失敗。 –

回答

0

OnConnect方法不調用,因爲可能你沒有消息循環在myUser.exe當你在MYAPP.EXE擁有它。

錯誤代碼10035是WSAEWOULDBLOCK和它正常的情況下,從MSDN

這是正常的WSAEWOULDBLOCK被報告爲結果從 調用非阻塞SOCK_STREAM套接字連接,因爲有些時候 必須經過一段時間才能建立連接。

所以不要擔心。如果你有一個消息循環,在你的Connect調用之後,OnConnect方法最終會在某個時間被調用,並且結果成功或者有錯誤代碼。

又見codeprojectSO

+0

當我們啓動myApp1.exe(VC++)和myServer2.exe(C#)之間的TCP通信時,一切正常。所以我的問題是什麼會導致這個問題的確切問題? –

+0

@Jose。從myApp1.exe啓動時,TCP通信工作正常,而從myUser.exe啓動時,它無法工作:對吧?兩者都是用VC++編寫的。他們是否共享打開TCP連接的相同代碼?查看我的更新回答 – salvolds

+0

是的。 myApp1.exe和myUser.exe共享相同的VC++代碼。 –