2012-04-20 1 views
0

J'ai une console applicaiotn qui utilise actuellement CAsyncSocket. J'ai besoin de mettre en œuvre SSL donc après quelques recherches j'ai trouvé ce projet: http://www.codeproject.com/Articles/3915/CAsyncSslSocketLayer-SSL-layer-class-for-CAsyncSocApplication console CAsyncSocketEx +?

Pour une raison quelconque, le même code simple qui fonctionne bien sur le code de l'interface graphique ne fonctionne pas dans l'application console. A quelqu'un exp. avec CAsyncSslSocketLayer? Merci.

Répondre

1

CAsyncSocketEx utilise une fenêtre comme une sorte de fil pas cher pour gérer les notifications d'événements qui viennent de select(). Malheureusement, si vous n'avez pas de boucle de message, la fenêtre qu'il crée ne recevra pas ces événements.

http://support.microsoft.com/kb/90975

Cet article explique qu'un appel à CreateWindow() doit être appelée à partir d'un fil qui a une boucle de message. Et si vous ne le faites pas, tout ce qui est envoyé via PostMessage() ne sera pas accessible.

J'ai récemment commencé à bricoler avec ceci - je veux enlever la fenêtre cachée ennuyante et la remplacer par un fil normal. Leur code repose sur WSAAsyncSelect() afin de recevoir des événements de socket ... dans une fenêtre. Yuk!

1

Cela faisait un moment que j'avais le même problème, mais si je me souviens bien, pour utiliser CAsyncSocket dans une application console, vous devez ajouter quelque chose comme DECLARE_CONSOLEAPP (deux premiers liens ci-dessous) à votre application console. Cela devrait donner à votre console une pompe de message pour générer les notifications de socket (OnReceive, etc.) Les applications GUI ont ces pompes, mais pas les applications de console, en général. Le troisième lien (msdn) ci-dessous pourrait également s'appliquer, il a plus d'informations et d'une manière différente. Si cela ne fonctionne toujours pas, vous devez placer des points d'arrêt dans votre code de socket et vous assurer que votre socket n'est pas instancié dans un thread ou un callback autre que l'application de console principale (celle qui a maintenant le message pump) .

Je pense que googling autour de 'CAsyncSocket WinApp' ou 'App console CAsyncSocket' montrerait plus.

http://www.codeguru.com/cpp/misc/misc/consoleapps/article.php/c243/Console-app-using-MFC.htm http://troels.knakkergaard.dk/code.htm

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/a6f1b72a-21d8-4046-a3dc-d7d29ece2ef6