求教,ACE 下使用 SSL 的程序,客户端无法连接
服务器端:基于 ACE 开发的 SSL Server 程序
程序运行,SSL 端口已打开监听
客户端连接的时候发送 ClientHello 之后,服务器直接 reset TCP 连接
请有经验的专家指点一下可能是哪方面的问题?
[解决办法]
选择的是验证对方证书模式?还是不验证
服务端证书及私钥是否载入了?
单单这一个问题可能会有多种原因,你先把问题定位一下,缩小点范围才好帮你啊
[解决办法]
请检查一下协议是否正确?
[解决办法]
- C/C++ code
#include "ace/INET_Addr.h"#include "ace/Log_Msg.h"#include "ace/Singleton.h"#include "ace/Null_Mutex.h"#include "ace/SSL/SSL_SOCK_Connector.h"#include <ace/SSL/SSl_Sock_Stream.h>#ifdef _DEBUG#pragma comment(lib, "ACEd.lib")#pragma comment(lib, "ACE_SSLd.lib")#else#pragma comment(lib, "ACE.lib")#pragma comment(lib, "ACE_SSL.lib")#endif#define TEST_GET_BUFFER "GET / HTTP/1.1\r\nHost: www.paypal.com\r\nUser-Agent: TestSSL-Agent0.1\r\n\r\n"class Options{public: int oneway_client_test(void); void run(void);};typedef ACE_Singleton<Options, ACE_Null_Mutex> OPTIONS;intOptions::oneway_client_test (void){ ACE_SSL_SOCK_Stream cli_stream; ACE_INET_Addr remote_addr (443, "www.paypal.com"); ACE_SSL_SOCK_Connector con; if (con.connect (cli_stream, remote_addr) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) %p\n"), ACE_TEXT ("connection failed")), -1); else ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) connected to %C at port %d\n"), remote_addr.get_host_name (), remote_addr.get_port_number ())); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) waiting...\n"))); // send the get request.. if ( cli_stream.send_n(TEST_GET_BUFFER, ACE_OS::strlen(TEST_GET_BUFFER)) == -1 ) { ACE_ERROR(( LM_ERROR, ACE_TEXT("(%P|%t) %p\n)"), ACE_TEXT("send_n"))); cli_stream.close(); return -1; } char buf[4096]; ACE_INT32 len; while ( true ) { if ( (len = cli_stream.recv(buf, sizeof(buf) - 1)) == -1 ) { ACE_ERROR(( LM_ERROR, ACE_TEXT("(%P|%t) %p\n)"), ACE_TEXT("recv_n"))); break; } if ( len == 0 ) break; buf[len] = 0; ACE_DEBUG(( LM_DEBUG, "%s", buf )); } // Close the connection. cli_stream.close (); return 0;}voidOptions::run (void){ this->oneway_client_test ();}static intrun_client (void){ // Raise the socket handle limit to the maximum. ACE::set_handle_limit (); OPTIONS::instance ()->run (); return 0;}intACE_TMAIN (int argc, ACE_TCHAR *argv[]){ // Initialize the logger. ACE_LOG_MSG->open (argv[0]); //if (OPTIONS::instance ()->parse_args (argc, argv) == -1) // return -1; // Run the client run_client (); return 0;}