亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? client.cpp

?? 這是廣泛使用的通信開(kāi)源項(xiàng)目,對(duì)于大容量,高并發(fā)的通訊要求完全能夠勝任,他廣泛可用于網(wǎng)絡(luò)游戲醫(yī)學(xué)圖像網(wǎng)關(guān)的高qos要求.更詳細(xì)的內(nèi)容可閱讀相應(yīng)的材料
?? CPP
字號(hào):
// client.cpp,v 1.1 2001/01/19 19:28:41 doccvs Exp

/* We need the connector object & we also bring in a simple string
  class.  */
#include "ace/Log_Msg.h"
#include "ace/SOCK_Connector.h"
#include "ace/SString.h"

/* In this tutorial, we extend SOCK_Stream by adding a few wrappers
  around the send_n() method.  */
class Client : public ACE_SOCK_Stream
{
public:
  // Basic constructor
  Client (void);

  /* Construct and open() in one call.  This isn't generally a good
    idea because you don't have a clean way to inform the caller when
    open() fails.  (Unless you use C++ exceptions.)  */
  Client (const char *server,
          u_short port);

  /* Open the connection to the server.  Notice that this mirrors the
    use of ACE_SOCK_Connector.  By providing our own open(), we can
    hide the connector from our caller & make it's interaction easier.  */
  int open (const char *server,
            u_short port);

  /* These are necessary if you're going to use the constructor that
    invokes open().  */
  int initialized (void) { return initialized_; }
  int error (void) { return error_; }

  /* This is where the coolness lies.  Most C++ folks are familiar
    with "cout << some-data."  It's a very handy and easy way to toss
    data around.  By adding these method calls, we're able to do the
    same thing with a socket connection.  */
  Client &operator<< (ACE_SString &str);
  Client &operator<< (char *str);
  Client &operator<< (int n);

protected:
  u_char initialized_;
  u_char error_;
};

/* The basic constructor just sets our flags to reasonable values.  */
Client::Client(void)
{
  initialized_ = 0;
  error_ = 0;
}

/* This constructor also sets the flags but then calls open().  If the
  open() fails, the flags will be set appropriately.  Use the two
  inline method calls initialized() and error() to check the object
  state after using this constructor.  */
Client::Client (const char *server,
                u_short port)
{
  initialized_ = 0;
  error_ = 0;
  this->open (server, port);
}

/* Open a connection to the server.  This hides the use of
  ACE_SOCK_Connector from our caller.  Since our caller probably
  doesn't care *how* we connect, this is a good thing.  */
int
Client::open (const char *server,
              u_short port)
{
  /* This is right out of Tutorial 3.  The only thing we've added is
    to set the initialized_ member variable on success.  */

  ACE_SOCK_Connector connector;
  ACE_INET_Addr addr (port, server);

  if (connector.connect (*this, addr) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "%p\n",
                       "open"),
                      -1);
  initialized_ = 1;
  return 0;
}

/* The first of our put operators sends a simple string object to the
  peer.  */
Client &
Client::operator<< (ACE_SString &str)
{
  /* We have to be able to allow: server << foo << bar << stuff;

    To accomplish that, every << operator must check that the object
    is in a valid state before doing work.  */

  if (initialized () && !error ())
    {
      /* Get the actual data held in the string object */
      const char *cp = str.fast_rep ();

      /* Send that data to the peer using send_n() as before.  If we
        have a problem, we'll set error_ so that subsequent <<
        operations won't try to use a broken stream.  */
      if (this->send_n (cp,
                        ACE_OS::strlen (cp)) == -1)
        error_ = 1;
    }
  else
    /* Be sure that error_ is set if somebody tries to use us when
        we're not initialized.  */
    error_ = 1;

  /* We have to return a reference to ourselves to allow chaining of
    put operations (eg -- "server << foo << bar").  Without the
    reference, you would have to do each put operation as a statement.
    That's OK but doesn't have the same feel as standard C++
    iostreams.  */
  return *this ;
}

/* How do you put a char*?  We'll take an easy way out and construct
an ACE_SString from the char* and then put that.  It would have been
more efficient to implement this with the body of the
operator<<(ACE_SString&) method and then express that method in terms
of this one.  There's always more than one way to do things!  */

Client &
Client::operator<< (char *str)
{
  ACE_SString newStr (str);

  *this << newStr;

  return *this ;

  /* Notice that we could have been really clever and done:

     return *this << ACE_SString (str);

    That kind of thing just makes debugging a pain though!  */
}

/* ACE_SString and char* are both about the same thing.  What do you
  do about different datatypes though?

  Do the same thing we did with char* and convert it to ACE_SString
  where we already have a << operator defined.  */
Client &
Client::operator<< (int n)
{
  /* Create a character buffer large enough for the largest number.
    That's a tough call but BUFSIZ should be quite enough.  */
  char buf[BUFSIZ];

  /* Put the number into our buffer...  */
  ACE_OS::sprintf (buf,
                   "(%d)\n",
                   n);

  /* And create the ACE_SString that we know how to put.  */
  ACE_SString newStr (buf);

  /* Send it and...  */
  *this << newStr;

  /* return ourselves as usual.  */
  return *this;
}

/* Now we pull it all together.  Like Tutorial 3, we'll allow command
  line options.  */
int
main (int argc, char *argv[])
{
  const char *server_host = argc > 1 ? argv[1] : ACE_DEFAULT_SERVER_HOST;
  u_short server_port = argc > 2 ? ACE_OS::atoi (argv[2]) : ACE_DEFAULT_SERVER_PORT;
  int max_iterations = argc > 3 ? ACE_OS::atoi (argv[3]) : 4;

  /* Use the basic constructor since the other isn't really very safe.  */
  Client peer;

  /* Open the server connection.  Notice how this is simpler than
    Tutorial 3 since we only have to provide a host name and port
    value.  */
  if (peer.open (server_host,
                 server_port) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "%p\n",
                       "open"),
                      -1);

  for (int i = 0; i < max_iterations; i++)
    {
      /* Tell the server which iteration we're on.  No more mucking
        aroudn with sprintf at this level!  It's all hidden from us.  */
      peer << "message = " << i+1;

      /* Everything OK?  */
      if (peer.error ())
        ACE_ERROR_RETURN ((LM_ERROR,
                           "%p\n",
                           "send"),
                          -1);
      else
        ACE_OS::sleep (1);
    }

  if (peer.close () == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "%p\n",
                       "close"),
                      -1);
  return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区不卡在线 | 久久久久久久av麻豆果冻| 久久综合久久综合亚洲| 一色屋精品亚洲香蕉网站| 久久99日本精品| 在线一区二区观看| 国产欧美一区二区精品久导航| 亚洲一区二区三区四区在线 | 欧美一卡二卡三卡| 国产精品免费视频一区| 久久99九九99精品| 欧美亚洲日本国产| 国产精品久久777777| 精品在线播放免费| 欧美精品在线视频| 亚洲黄色av一区| av激情亚洲男人天堂| 国产亚洲欧美日韩在线一区| 欧美aⅴ一区二区三区视频| 欧美性猛交xxxxxxxx| 国产精品护士白丝一区av| 国产精品一级片| 日韩欧美在线综合网| 天天爽夜夜爽夜夜爽精品视频| 不卡免费追剧大全电视剧网站| 精品国产一区二区三区久久影院| 亚洲不卡av一区二区三区| 91视频免费看| 国产精品久久久久久久久图文区 | 麻豆成人91精品二区三区| 欧美亚洲一区二区在线| 亚洲一区二区在线免费观看视频 | 一区二区三区在线免费播放| 成人动漫中文字幕| 国产精品久久久久久久午夜片| 国产91丝袜在线18| 国产女主播一区| 国产91在线观看| 国产精品国产三级国产普通话99 | 国产酒店精品激情| 日本一区二区不卡视频| 成人国产一区二区三区精品| 国产精品美女久久久久av爽李琼| 国产成人综合精品三级| 中文字幕av免费专区久久| 国产·精品毛片| 国产精品免费网站在线观看| 色综合久久九月婷婷色综合| 亚洲免费av观看| 欧美精品一级二级三级| 美美哒免费高清在线观看视频一区二区| 3751色影院一区二区三区| 国内精品国产三级国产a久久 | eeuss鲁片一区二区三区| 久久精品国产99久久6| 欧美精品在线一区二区三区| 美腿丝袜亚洲一区| 久久久九九九九| 99视频精品在线| 婷婷亚洲久悠悠色悠在线播放| 91麻豆精品国产91久久久久久久久| 美女一区二区在线观看| 久久久久久久久久久电影| 91啪亚洲精品| 男男视频亚洲欧美| 中文字幕va一区二区三区| 欧美日韩dvd在线观看| 激情小说欧美图片| 一区二区在线看| 欧美一卡二卡三卡| 91在线观看一区二区| 首页综合国产亚洲丝袜| 国产亚洲一区二区三区在线观看| 91小视频在线| 天天亚洲美女在线视频| 国产欧美综合色| 欧美日韩一区不卡| 国产九九视频一区二区三区| 一区二区三区美女| 日韩欧美一区电影| 91在线观看成人| 蜜桃av噜噜一区| 自拍偷拍亚洲激情| 精品国内片67194| 欧美色欧美亚洲另类二区| 国产91丝袜在线播放0| 日韩影院在线观看| 亚洲丝袜制服诱惑| 经典三级视频一区| 欧美精品一区二区三区蜜桃视频| 樱桃国产成人精品视频| 91麻豆精品国产自产在线观看一区| 黄色资源网久久资源365| 亚洲免费色视频| 国产亚洲成年网址在线观看| 欧美日韩黄色影视| 色老汉一区二区三区| 国产69精品久久99不卡| 狠狠久久亚洲欧美| 日本中文字幕不卡| 亚洲国产成人porn| 亚洲人妖av一区二区| 日本一区二区高清| 国产亚洲自拍一区| 久久久亚洲欧洲日产国码αv| 5858s免费视频成人| 欧美影院一区二区| 91国偷自产一区二区使用方法| 成人免费观看视频| 国产aⅴ精品一区二区三区色成熟| 激情av综合网| 免费在线一区观看| 国产精品免费视频网站| 中文字幕视频一区二区三区久| 日韩精品一区二区在线| 欧美一区二区免费观在线| 欧美三级视频在线| 在线观看网站黄不卡| 91美女片黄在线观看91美女| 成人av动漫网站| 成人免费黄色大片| 成人黄色一级视频| 99久久99久久精品国产片果冻| 国产.精品.日韩.另类.中文.在线.播放| 国产一区二区免费看| 国产乱子伦视频一区二区三区 | 97精品久久久久中文字幕| 不卡区在线中文字幕| 一本大道av一区二区在线播放| 成人精品小蝌蚪| 色综合天天综合狠狠| 欧洲亚洲国产日韩| 欧美一区二区在线观看| 精品久久久久久久久久久院品网 | 91超碰这里只有精品国产| 欧美精品三级在线观看| 日韩视频免费观看高清完整版在线观看| 欧美一区二区视频观看视频| 欧美大度的电影原声| 2014亚洲片线观看视频免费| 国产欧美一区视频| 亚洲精品一二三| 男人的天堂久久精品| 粉嫩13p一区二区三区| 欧美色精品天天在线观看视频| 欧美肥胖老妇做爰| 欧美国产欧美综合| 亚洲国产精品综合小说图片区| 日本女人一区二区三区| 成人免费高清视频| 欧美三级日韩三级国产三级| 26uuu欧美日本| 亚洲精品美腿丝袜| 久久精品国产网站| 91激情在线视频| 2024国产精品| 一区二区免费视频| 国产精品99久久不卡二区| 色婷婷av久久久久久久| 欧美成人性福生活免费看| 1000精品久久久久久久久| 免费看欧美美女黄的网站| 成人福利电影精品一区二区在线观看 | 久久奇米777| 国产午夜精品福利| 午夜久久久影院| av一二三不卡影片| 日韩免费高清av| 亚洲精品福利视频网站| 国产在线视频一区二区三区| 91黄色在线观看| 国产精品美女久久久久久久| 青青草原综合久久大伊人精品优势| 97久久久精品综合88久久| 欧美xxxx在线观看| 日韩va欧美va亚洲va久久| 色婷婷综合五月| 欧美高清在线视频| 狠狠色丁香婷婷综合| 欧美精品色综合| 亚洲最大的成人av| 成人高清av在线| 国产欧美视频一区二区| 久久精品99国产精品日本| 欧美日韩精品一区二区三区| 亚洲欧洲日产国码二区| 国产精品中文字幕日韩精品| 欧美一区二区三区免费视频| 日韩中文字幕一区二区三区| 91福利社在线观看| 亚洲一二三区视频在线观看| 91丨九色丨蝌蚪丨老版| 国产精品二三区| 国产精品国产a级| 日本最新不卡在线| 欧美视频在线观看一区二区| 亚洲色图一区二区| 91麻豆精品在线观看| 尤物视频一区二区| 日本道色综合久久|