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

📄 receiver.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// file      : Receiver.cpp// author    : Boris Kolpackov <boris@kolpackov.net>// cvs-id    : Receiver.cpp,v 1.2 2005/07/11 18:50:23 boris Exp#include "ace/Vector_T.h"#include "ace/Log_Msg.h"#include "ace/OS_NS_string.h"#include "ace/Time_Value.h"     // ACE_Time_Value#include "ace/OS_NS_sys_time.h" // gettimeofday#include "ace/RMCast/Socket.h"#include "Protocol.h"typedefACE_Vector<unsigned char, ACE_VECTOR_DEFAULT_SIZE>Status_List;class args {};intACE_TMAIN (int argc, ACE_TCHAR* argv[]){  try  {    if (argc < 2) throw args ();    ACE_INET_Addr addr (argv[1]);    ACE_RMCast::Socket socket (addr, false);    Message expected_msg;    expected_msg.sn = 0;    // VC6 does not know about the new rules.    //    {      for (unsigned short i = 0; i < payload_size; i++)      {        expected_msg.payload[i] = i;      }    }    Status_List received (message_count);    Status_List damaged (message_count);    Status_List duplicate (message_count);    // VC6 does not know about new rules.    //    {      for (unsigned int i = 0; i < message_count; ++i)      {        received.push_back (0);        damaged.push_back (0);        duplicate.push_back (0);      }    }    Message msg;    bool first (true);    ACE_Time_Value start_time, time;    while (true)    {      ssize_t s = socket.size ();      if (first)      {        start_time = ACE_OS::gettimeofday ();        first = false;      }      if (s == -1 && errno == ENOENT)      {        ACE_ERROR ((LM_ERROR, "unavailable message detected\n"));        // Receive it.        //        socket.recv (&msg, sizeof (msg));        continue;      }      if (s != sizeof (msg))      {        ACE_ERROR ((LM_ERROR, "unexpected message size %d, expected %d\n",                    s, sizeof (msg)));        continue;      }      if (socket.recv (&msg, sizeof (msg)) != s)      {        ACE_ERROR ((LM_ERROR,                    "recv() reported different size than size()\n"));        continue;      }      if (received[msg.sn] == 1)      {        duplicate[msg.sn] = 1;      }      else      {        received[msg.sn] = 1;        if (ACE_OS::memcmp (expected_msg.payload,                            msg.payload,                            payload_size) != 0)        {          damaged[msg.sn] = 1;        }      }      if (msg.sn + 1 == message_count) break;    }    time = ACE_OS::gettimeofday () - start_time;    unsigned int lost_count (0), damaged_count (0), duplicate_count (0);    {      for (Status_List::Iterator i (received); !i.done (); i.advance ())      {        unsigned char* e;        i.next (e);        if (*e == 0) ++lost_count;      }    }    {      for (Status_List::Iterator i (damaged); !i.done (); i.advance ())      {        unsigned char* e;        i.next (e);        if (*e == 1) ++damaged_count;      }    }    {      for (Status_List::Iterator i (duplicate); !i.done (); i.advance ())      {        unsigned char* e;        i.next (e);        if (*e == 1) ++duplicate_count;      }    }    unsigned long tput =      (sizeof (msg) * message_count) / (time.msec () == 0 ? 1 : time.msec ());    ACE_DEBUG ((LM_DEBUG,                "lost       : %d\n"                "damaged    : %d\n"                "duplicate  : %d\n"                "throughput : %d KB/sec\n",                lost_count,                damaged_count,                duplicate_count,                tput));    /*    cout << "lost message dump:" << endl;    unsigned long total = 0;    for (Status_List::iterator           begin (received.begin ()), i (begin), end (received.end ());         i != end;)    {      if (*i == 0)      {        unsigned long count = 1;        for (Status_List::iterator j = i + 1;             j < end && *j == 0;             j++, count++);        cout << '\t' << i - begin << " : " << count << endl;        i += count;        total += count;      }      else ++i;    }    if (total != lost_count) cerr << "trouble" << endl;    */    return 0;  }  catch (args const&)  {    ACE_ERROR ((LM_ERROR,                "usage: %s <IPv4 multicast address>:<port>\n", argv[0]));  }  return 1;}

⌨️ 快捷键说明

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