client.cpp

来自「ACE自适配通信环境(ADAPTIVE Communication Enviro」· C++ 代码 · 共 131 行

CPP
131
字号
/** * client for a basic connection establishment test using HTBP * * client.cpp,v 1.2 2004/10/27 17:13:20 mesnier_p Exp */#include "ace/Log_Msg.h"#include "ace/HTBP/HTBP_Session.h"#include "ace/HTBP/HTBP_Stream.h"#include "ace/HTBP/HTBP_Addr.h"#include "ace/HTBP/HTBP_ID_Requestor.h"#include "ace/HTBP/HTBP_Environment.h"intACE_TMAIN(int argc, ACE_TCHAR *argv[]){  ACE_OS::socket_init (ACE_WSOCK_VERSION);  if (argc < 2)    ACE_ERROR_RETURN ((LM_ERROR,                       "Usage: client <remote host>\n"),                      0);  ACE::HTBP::Environment env;#if 0 // this should be a taken from a command line argument  env.import_config (ACE_TEXT("../HTBP_Config.conf"));#endif /* 0 */  ACE::HTBP::ID_Requestor req (&env);  ACE::HTBP::Addr local(ACE_TEXT_ALWAYS_CHAR(req.get_HTID()));  unsigned remote_port = 8088;  const ACE_TCHAR * remote_host = argv[1];  unsigned proxy_port = 0;  ACE_TString proxy_host;  if (env.get_proxy_port(proxy_port) != 0 ||      env.get_proxy_host(proxy_host) != 0)    {      ACE_DEBUG ((LM_DEBUG,                  ACE_TEXT("no proxy address in ")                  ACE_TEXT("config, using direct connect\n")));      proxy_port = remote_port;      proxy_host = remote_host;    }  ACE_INET_Addr proxy(proxy_port,proxy_host.c_str());  ACE::HTBP::Addr remote (remote_port,ACE_TEXT_ALWAYS_CHAR(remote_host));  ACE::HTBP::Session session(remote,                           local,                           ACE::HTBP::Session::next_session_id(),                           &proxy);  ACE::HTBP::Stream stream (&session);  char buffer[1000];  ssize_t n = 0;  int retrycount = 10;  for (int i = 0; i < 3; i++)    {      ACE_OS::sprintf (buffer,"Do you hear me? %d",i);      ACE::HTBP::Channel *ob = session.outbound();      n = stream.send (buffer,ACE_OS::strlen(buffer)+1);      if (n == -1)        ACE_ERROR_RETURN ((LM_ERROR, "%p\n","stream send"),-1);      ACE_DEBUG ((LM_DEBUG, "send returned %d\n",n));      retrycount = 10;      ACE_DEBUG ((LM_DEBUG,"after send, outbound = %x, ob = %x\n",                  session.outbound(), ob));      while ((n = ob->recv_ack()) == -1             && (errno == EWOULDBLOCK || errno == ETIME)             && retrycount > 0)        {          retrycount--;          ACE_DEBUG ((LM_DEBUG,"waiting for ack, %d tries left\n",                      retrycount));          ACE_OS::sleep (1);        }      ACE_DEBUG ((LM_DEBUG,"After wait for ack, n = %d, retry = %d\n",                  n,retrycount,errno));      retrycount = 10;      while ((n = stream.recv(buffer,1000)) == -1             && (errno == EWOULDBLOCK || errno == ETIME)             && retrycount > 0)        {          retrycount--;          ACE_DEBUG ((LM_DEBUG,"waiting for inbound data, %d tries left\n",                      retrycount));          ACE_OS::sleep(1);        }      if (retrycount == 0 || n < 0)        {          ACE_DEBUG ((LM_DEBUG,"bailing after wait, %p\n","recv"));          break;        }      buffer[n] = 0;      ACE_DEBUG ((LM_DEBUG,"Got: \"%s\"\n",buffer));    }  ACE::HTBP::Channel *ob = session.outbound();  n = stream.send ("goodbye",7);  if (n == -1)    ACE_ERROR_RETURN ((LM_ERROR, "%p\n","stream send"),-1);  ACE_DEBUG ((LM_DEBUG, "send returned %d\n",n));  retrycount = 10;  while ((n = ob->recv_ack()) == -1         && (errno == EWOULDBLOCK || errno == ETIME)         && retrycount > 0)    {      retrycount--;      ACE_DEBUG ((LM_DEBUG,"waiting for ack, %d tries left\n",                  retrycount));      ACE_OS::sleep (1);    }  ACE_DEBUG ((LM_DEBUG,"After wait for ack, n = %d, retry = %d\n",              n,retrycount,errno));  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?