VC2008+ACE+SSL编译方法

1 篇文章 0 订阅

1、下载安装Perl for windows ActivePerl,下载地址:http://www.activestate.com/activeperl/downloads/ ,本文使用ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi,执行安装即可。

 

2、下载SSL:http://www.openssl.org/source/ ,本文使用openssl-0.9.8l

 

     安装SSL,解压后用文本工具打开INSTALL.W32,根据文档描述的步骤执行(使用“Visual Studio 2008 命令提示”工具执行):

    

  1. perl Configure VC-WIN32 --prefix=D:/c++/openssl  
  2.   
  3. ms/do_ms  
  4.   
  5. nmake -f ms/ntdll.mak  
  6.   
  7. nmake -f ms/ntdll.mak test  
  8.   
  9. nmake -f ms/ntdll.mak install  

 

     环境变量中添加 SSL_ROOT = D:/c++/openssl

                            PATH = %SSL_ROOT%/bin;%SSL_ROOT%/lib

 

3、ACE+VC2008环境搭建请参见:http://blog.csdn.net/ishow99/archive/2009/11/19/4835161.aspx

 

4、打开:$(ACE_ROOT)/bin/MakeProjectCreator/config/vc9.features ,设置:ssl=1

 

5、在$(ACE_ROOT)/bin目录下执行:mpc.pl -type vc9 $(ACE_ROOT)/ace/SSL/ssl.mpc,执行完后,在$(ACE_ROOT)/ace/SSL/目录下将会产生一个Visual Studio的工程文件SSL.vcproj

 

6、在$(ACE_ROOT)/ace目录下打开ace_vc9.sln文件,然后加入SSL工程文件(SSL.vcproj)即可生成ace_ssl.dll库了

 

7、转载网络上一段测试代码,实现向www.paypal.com发送GET请求,然后打印服务器返回的内容:

  1. #include "ace/INET_Addr.h"   
  2.   
  3. #include "ace/Log_Msg.h"   
  4.   
  5. #include "ace/Singleton.h"  
  6.   
  7. #include "ace/Null_Mutex.h"  
  8.   
  9.   
  10. #include "ace/SSL/SSL_SOCK_Connector.h"  
  11.   
  12. #include <ace/SSL/SSl_Sock_Stream.h>   
  13.   
  14.   
  15.   
  16. #ifdef _DEBUG   
  17.   
  18. #pragma comment(lib, "ACEd.lib")   
  19.   
  20. #pragma comment(lib, "ACE_SSLd.lib")   
  21.   
  22. #else   
  23.   
  24. #pragma comment(lib, "ACE.lib")   
  25.   
  26. #pragma comment(lib, "ACE_SSL.lib")   
  27.   
  28. #endif   
  29.   
  30.   
  31. #define TEST_GET_BUFFER "GET / HTTP/1.1/r/nHost: www.paypal.com/r/nUser-Agent: TestSSL-Agent0.1/r/n/r/n"  
  32.   
  33.   
  34. class Options  
  35.   
  36. {  
  37.   
  38. public:  
  39.   
  40.   
  41.      int oneway_client_test(void);  
  42.   
  43.      void run(void);  
  44.   
  45. };  
  46.   
  47.   
  48. typedef ACE_Singleton<Options, ACE_Null_Mutex> OPTIONS;  
  49.   
  50.   
  51. int  
  52.   
  53. Options::oneway_client_test (void)  
  54.   
  55. {  
  56.   
  57.      ACE_SSL_SOCK_Stream cli_stream;  
  58.   
  59.      ACE_INET_Addr remote_addr (443, "www.paypal.com");  
  60.   
  61.   
  62.      ACE_SSL_SOCK_Connector con;  
  63.   
  64.   
  65.      if (con.connect (cli_stream,  
  66.   
  67.          remote_addr) == -1)  
  68.   
  69.          ACE_ERROR_RETURN ((LM_ERROR,  
  70.   
  71.          ACE_TEXT ("(%P|%t) %p/n"),  
  72.   
  73.          ACE_TEXT ("connection failed")),  
  74.   
  75.          -1);  
  76.   
  77.      else  
  78.   
  79.          ACE_DEBUG ((LM_DEBUG,  
  80.   
  81.          ACE_TEXT ("(%P|%t) connected to %C at port %d/n"),  
  82.   
  83.          remote_addr.get_host_name (),  
  84.   
  85.          remote_addr.get_port_number ()));  
  86.   
  87.   
  88.      ACE_DEBUG ((LM_DEBUG,  
  89.   
  90.          ACE_TEXT ("(%P|%t) waiting.../n")));  
  91.   
  92.   
  93.      // send the get request..  
  94.   
  95.      if ( cli_stream.send_n(TEST_GET_BUFFER, ACE_OS::strlen(TEST_GET_BUFFER)) == -1 )  
  96.   
  97.      {  
  98.   
  99.          ACE_ERROR(( LM_ERROR,  
  100.   
  101.               ACE_TEXT("(%P|%t) %p/n)"),  
  102.   
  103.               ACE_TEXT("send_n")));  
  104.   
  105.          cli_stream.close();  
  106.   
  107.          return -1;  
  108.   
  109.      }  
  110.   
  111.   
  112.      char buf[4096];  
  113.   
  114.      ACE_INT32 len;  
  115.   
  116.      while ( true )  
  117.   
  118.      {  
  119.   
  120.          if ( (len = cli_stream.recv(buf, sizeof(buf) - 1)) == -1 )  
  121.   
  122.          {  
  123.   
  124.               ACE_ERROR(( LM_ERROR,  
  125.   
  126.                             ACE_TEXT("(%P|%t) %p/n)"),  
  127.   
  128.                             ACE_TEXT("recv_n")));  
  129.   
  130.               break;  
  131.   
  132.          }  
  133.   
  134.   
  135.          if ( len == 0 )  
  136.   
  137.               break;  
  138.   
  139.   
  140.          buf[len] = 0;  
  141.   
  142.   
  143.          ACE_DEBUG(( LM_DEBUG, "%s", buf ));  
  144.   
  145.      }  
  146.   
  147.   
  148.      // Close the connection.   
  149.   
  150.      cli_stream.close ();  
  151.   
  152.   
  153.      return 0;  
  154.   
  155. }  
  156.   
  157.   
  158.   
  159. void  
  160.   
  161. Options::run (void)  
  162.   
  163. {  
  164.   
  165.      this->oneway_client_test ();  
  166.   
  167. }  
  168.   
  169.   
  170. static int  
  171.   
  172. run_client (void)  
  173.   
  174. {  
  175.   
  176.   
  177.      OPTIONS::instance ()->run ();  
  178.   
  179.   
  180.      return 0;  
  181.   
  182. }  
  183.   
  184.   
  185. int  
  186.   
  187. ACE_TMAIN (int argc, ACE_TCHAR *argv[])  
  188.   
  189. {  
  190.   
  191.      run_client ();  
  192.   
  193.      return 0;  
  194.   
  195. }  

此篇文章来自于【 http://blog.csdn.net/ishow99/article/details/5310265
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值