⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
//=============================================================================/**  *  @file   server.cpp  *  *  server.cpp,v 1.2 2004/12/19 10:45:29 jwillemsen Exp  *  *  @author Craig Rodrigues <crodrigu@bbn.com>  *  @brief  Start a server which listens for UDP packets on a specified port.  *///=============================================================================#include "ace/Reactor.h"#include "ace/Process.h"#include "ace/SOCK_Dgram.h"#include "ace/INET_Addr.h"#include "ace/Log_Msg.h"// Port used to receive for dgrams.static u_short port1;class Dgram_Endpoint : public ACE_Event_Handler{public:  Dgram_Endpoint (const ACE_INET_Addr &local_addr);  // = Hook methods inherited from the <ACE_Event_Handler>.  virtual ACE_HANDLE get_handle (void) const;  virtual int handle_input (ACE_HANDLE handle);  virtual int handle_timeout (const ACE_Time_Value & tv,                              const void *arg = 0);  virtual int handle_close (ACE_HANDLE handle,                            ACE_Reactor_Mask close_mask);  int send (const char *buf, size_t len, const ACE_INET_Addr &);  // Send the <buf> to the peer.private:  ACE_SOCK_Dgram endpoint_;  // Wrapper for sending/receiving dgrams.};intDgram_Endpoint::send (const char *buf,                      size_t len,                      const ACE_INET_Addr &addr){  return this->endpoint_.send (buf, len, addr);}Dgram_Endpoint::Dgram_Endpoint (const ACE_INET_Addr &local_addr)  : endpoint_ (local_addr){}ACE_HANDLEDgram_Endpoint::get_handle (void) const{  return this->endpoint_.get_handle ();}intDgram_Endpoint::handle_close (ACE_HANDLE handle,                              ACE_Reactor_Mask){  ACE_UNUSED_ARG (handle);  this->endpoint_.close ();  delete this;  return 0;}intDgram_Endpoint::handle_input (ACE_HANDLE){  char buf[BUFSIZ];  ACE_INET_Addr from_addr;  ssize_t n = this->endpoint_.recv (buf,                                    sizeof buf,                                    from_addr);  if (n == -1)    ACE_ERROR ((LM_ERROR,                "%p\n",                "handle_input"));  else    {      buf[n] = 0;      ACE_DEBUG ((LM_DEBUG,                  "Received buf of size %d = %s\n",                  n,                  buf));    }  return 0;}intDgram_Endpoint::handle_timeout (const ACE_Time_Value &,                                const void *){  ACE_DEBUG ((LM_DEBUG,              "(%P|%t) timed out for endpoint\n"));  return 0;}static intrun_test (u_short localport){  ACE_INET_Addr local_addr (localport);  Dgram_Endpoint *endpoint;  ACE_NEW_RETURN (endpoint,                  Dgram_Endpoint (local_addr),                  -1);  ACE_DEBUG((LM_DEBUG, "Starting server on port %d\n",port1));  // Read data from other side.  if (ACE_Reactor::instance ()->register_handler      (endpoint,       ACE_Event_Handler::READ_MASK) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       "ACE_Reactor::register_handler"),                      -1);  int ret;  while(1){    ACE_Time_Value tv(10, 0);    ret = ACE_Reactor::instance ()->handle_events (&tv);    /* Error occurred while handling event */    if (ret < 0)      {        ACE_ERROR_RETURN ((LM_DEBUG,                           "(%P|%t) %p\n",                           "handle_events"),                          -1);      }    /* We have timed out without handling an event, break out of loop */    if(ret == 0) break;  }  return 0;}intACE_TMAIN (int argc, ACE_TCHAR *argv[]){  // Estabish call backs and socket names.  port1 = argc > 1 ? ACE_OS::atoi (argv[1]) : ACE_DEFAULT_SERVER_PORT;  if(argc < 3)    {      run_test (port1);    }  else{    ACE_DEBUG((LM_DEBUG, "\nUsage:\n  %s [port number]\n", argv[0]));    return -1;  }  return 0;}

⌨️ 快捷键说明

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