0

我有当前使用 CAsyncSocket 的控制台应用程序。我需要实现 SSL,所以经过一番搜索,我发现了这个项目: http: //www.codeproject.com/Articles/3915/CAsyncSslSocketLayer-SSL-layer-class-for-CAsyncSoc

出于某种原因,在 GUI 代码上运行良好的相同简单代码在控制台应用程序中不起作用。有没有人经验 使用 CAsyncSslSocketLayer 吗?谢谢。

4

2 回答 2

1

自从我遇到同样的问题以来已经有一段时间了,但如果我没记错的话,要在控制台应用程序中使用 CAsyncSocket,您需要将 DECLARE_CONSOLEAPP(如下所示的前两个链接)之类的内容添加到控制台应用程序。这应该为您的控制台提供一个消息泵来生成套接字通知(OnReceive 等)。GUI 应用程序具有这些泵,但控制台应用程序通常没有。下面的第三个(msdn)链接也可能适用,它有更多信息和不同的方式。

如果这些仍然不起作用,您应该在套接字代码中放置断点,并确保您的套接字没有在主控制台应用程序(现在具有消息泵的应用程序)之外的线程或回调中实例化。

我认为搜索“CAsyncSocket WinApp”或“CAsyncSocket 控制台应用程序”会显示更多信息。

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

于 2012-06-12T21:06:23.543 回答
1

CAsyncSocketEx 使用窗口作为一种廉价线程来处理来自 select() 的事件通知。不幸的是,如果您没有消息循环,那么它创建的窗口将不会接收这些事件。

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

本文解释了对 CreateWindow() 的调用需要从具有消息循环的线程中调用。如果你不这样做,那么通过 PostMessage() 发送的任何内容都不会到达那里。

我最近开始修改这个——我想删除烦人的隐藏窗口并用普通线程替换它。他们的代码依赖于 WSAAsyncSelect() 来接收套接字事件......到一个窗口。呸!

于 2013-01-31T01:51:34.477 回答