2017-01-19 2 views
0

Das vorhandene Szenario wird im Folgenden erläutert.TCP-Verbindung über CAsyncSocket funktioniert nicht: onConnect nie aufgerufen

Unsere Anwendung läuft auf Client Server Architektur; Der Client wird mit VC++ entwickelt und der Server wird mit C# entwickelt.
Auf der Server-Seite gibt es zwei exe läuft (myServer1.exe - Windows-Dienst basiert und myServer2.exe - Windows-Anwendung). myServer2.exe kommuniziert mit myServer1.exe über eine TCP-Socket-Verbindung.
Auf der Clientseite führt eine EXE (myApp1.exe -Windows Service-basiert) eine weitere EXE basierend auf Benutzersitzungen aus, die auf dem Computer vorhanden sind (myUser.exe für alle Benutzersitzungen). Jede myUser.exe-Instanzen kommunizieren mit myApp1.exe über PIPE-Kommunikation. Und myApp1.exe kommuniziert außerdem mit MyServer1.exe über eine andere TCP-Kommunikation.

Neues Szenario.

Wir erstellen jetzt einen TCP-Socket im Hörmodus in myServer2.exe (Server-Anwendung -C#). myUser.exe (Clientanwendung -VC++) versucht über eine TCP-Verbindung mithilfe von CAsyncSocket eine Verbindung zu myServer2.exe herzustellen. Aber die Rahmenaufrufe (OnConnect, OnReceive und OnClose) sind nicht passiert.

Sockel Erstellungs- Create(0,SOCK_STREAM); // CAyncSocket

Sockel connection- Connect("ServerIP", "ServerPort"); // CAsyncSocket

Hinweis: Wenn wir die Socketerstellung und Verbindungsfunktionen in Windows-Dienst auf Basis exe (myApp1.exe) bewegen, funktioniert die Verbindung in Ordnung, OnConnect OnReceive und OnClose geschehen.

Warum Rahmen Aufruf OnConnect nicht in myUser.exe während geschieht in myApp1.exe ist?

+0

so im Allgemeinen, haben Sie eine C# Windows-Server-Anwendung und viele VC++ Kunden und Sie wollen, dass sie direkt über TCP kommunizieren? Teilen Sie einen Code – salvolds

+0

Ab sofort funktioniert die Kommunikation zwischen dem Server und den Clients gut. Problem ist, dass ich einen Socket in der myUser.exe mit dem sendenden Modus erstellen möchte und der myServer2.exe dasselbe abhören wird. Aber die Benachrichtigungsfunktionen (Onconnect, OnSend usw.) auf der myUser.exe (VC++) werden nicht ausgeführt . Immer den Socket-Fehler 10035 (Der Vorgang sollte später zurückgezogen werden).Aber wir haben es mehrmals versucht und immer noch den gleichen Fehler bekommen. Also die 'CAsyncSocket :: Connect' immer fehlgeschlagen. –

Antwort

0

Ihre OnConnect Methode wird nicht aufgerufen, weil wahrscheinlich Sie nicht die Nachrichtenschleife in myUser.exe haben, während Sie es in myApp.exe haben.

Fehlercode 10035 ist WSAEWOULDBLOCK und es normal für Ihren Fall von MSDN:

Es ist normal, WSAEWOULDBLOCK als das Ergebnis von gemeldet werden auf einer nicht-blockierenden SOCK_STREAM Buchse verbinden anrufen, seit einiger Zeit müssen verstreichen, damit die Verbindung hergestellt werden kann.

Also mach dir keine Sorgen darüber. Wenn Sie nach Ihrem Connect-Aufruf eine Nachrichtenschleife haben, wird die Methode OnConnect schließlich zu einem bestimmten Zeitpunkt mit einem erfolgreichen Ergebnis oder mit einem Fehlercode aufgerufen.

Siehe auch codeproject und SO

+0

Wenn wir eine TCP-Kommunikation zwischen myApp1.exe (VC++) und myServer2.exe (C#) initiieren, funktioniert alles einwandfrei. Also meine Frage ist, was wäre das genaue Problem, das dieses Problem verursacht ?? –

+0

@Jose. TCP-Kommunikation funktioniert gut, wenn sie von myApp1.exe gestartet wird, während sie nicht funktioniert, wenn sie von myUser.exe gestartet wird: richtig? Beide sind in VC++ geschrieben. Teilen sie den gleichen Code zum Öffnen der TCP-Verbindung? Siehe meine aktualisierte Antwort – salvolds

+0

Ja. Sowohl myApp1.exe als auch myUser.exe teilen denselben VC++ - Code. –

Verwandte Themen