24,854
社区成员
发帖
与我相关
我的任务
分享
#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;
int
Options::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;
}
void
Options::run (void)
{
this->oneway_client_test ();
}
static int
run_client (void)
{
// Raise the socket handle limit to the maximum.
ACE::set_handle_limit ();
OPTIONS::instance ()->run ();
return 0;
}
int
ACE_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;
}