0

現在 CAsyncSocket を使用しているコンソール アプリケーションがあります。SSL を実装する必要があるので、検索した結果、このプロジェクトを見つけました: http://www.codeproject.com/Articles/3915/CAsyncSslSocketLayer-SSL-layer-class-for-CAsyncSoc

何らかの理由で、GUI コードで正常に動作する同じ単純なコードがコンソール アプリでは動作しません。誰か経験があります。CAsyncSslSocketLayer で? ありがとう。

4

2 に答える 2

1

同じ問題が発生してからしばらく経ちましたが、私の記憶が正しければ、コンソール アプリで CAsyncSocket を使用するには、コンソール アプリに DECLARE_CONSOLEAPP (以下に示す最初の 2 つのリンク) などを追加する必要があります。これにより、ソケット通知 (OnReceive など) を生成するためのメッセージ ポンプがコンソールに提供されます。GUI アプリにはこれらのポンプがありますが、通常、コンソール アプリにはありません。以下の 3 番目の (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 に答える