亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3086 | 回復(fù): 2
打印 上一主題 下一主題

[C++] Asio asyn_read沒(méi)有被回調(diào) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-03-20 16:16 |只看該作者 |倒序?yàn)g覽
本帖最后由 chen1922 于 2016-03-20 16:17 編輯

初次接觸asio,照著例子寫(xiě)了一個(gè),鏈接的是echo_server
echo_server收到了發(fā)送的數(shù)據(jù),也返回了.
問(wèn)題1.io_service在resolver之前就run,為啥會(huì)提示boost::system 995錯(cuò)誤
問(wèn)題2.客戶端異步發(fā)送了,但是沒(méi)有異步讀取。如果改成同步讀取又能收到數(shù)據(jù)

幫忙看下是啥問(wèn)題。
  1. class Client
  2. {
  3. public:
  4.     Client(boost::asio::io_service& io_service)
  5.         : m_io_service(io_service)
  6.         , m_socket(io_service)
  7.     {
  8.     }

  9.     void doConnect(boost::asio::ip::tcp::resolver::iterator it)
  10.     {
  11.         boost::asio::async_connect(m_socket, it,
  12.             [this](boost::system::error_code ec, boost::asio::ip::tcp::resolver::iterator)
  13.             {
  14.                 if (!ec) {
  15.                     doRead();
  16.                 } else {
  17.                     std::cout << ec;
  18.                 }
  19.             });
  20.     }

  21.     void doRead()
  22.     {
  23.         boost::asio::async_read(m_socket, boost::asio::buffer(m_buffer, 1024),
  24.             [this](boost::system::error_code ec, std::size_t length)
  25.             {
  26.                 if (!ec) {
  27.                     if (length > 0) {
  28.                         std::string s(m_buffer.data(), m_buffer.data() + length);
  29.                         std::cout << "read:" << s << "\n";
  30.                     }
  31.                     doRead();
  32.                 } else {
  33.                     std::cout << ec;
  34.                     m_socket.close();
  35.                 }
  36.             });
  37.     }

  38.     void sendMsg(std::string s)
  39.     {
  40.         m_io_service.post([this, s]()
  41.         {
  42.             bool write_in_progress = !m_write_msgs.empty();
  43.             m_write_msgs.push_back(s);
  44.             if (!write_in_progress) {
  45.                 doWrite();
  46.             }
  47.         });
  48.     }

  49.     void doWrite()
  50.     {
  51.         boost::asio::async_write(m_socket,
  52.             boost::asio::buffer(m_write_msgs.front().data(), m_write_msgs.front().length()),
  53.             [this](boost::system::error_code ec, std::size_t /*length*/)
  54.             {
  55.                 if (!ec) {
  56.                     m_write_msgs.pop_front();
  57.                     if (!m_write_msgs.empty()) {
  58.                         doWrite();
  59.                     }
  60.                 } else {
  61.                     m_socket.close();
  62.                 }
  63.             });
  64.     }

  65.     boost::asio::io_service&        m_io_service;
  66.     boost::asio::ip::tcp::socket    m_socket;
  67.     std::array<char, 1024>          m_buffer;
  68.     std::list<std::string>          m_write_msgs;
  69. };

  70. int main()
  71. {
  72.     boost::asio::io_service io_service;
  73.     boost::asio::io_service::work work(io_service);
  74. //問(wèn)題1.如果在這里調(diào)用run函數(shù),就會(huì)提示boost::system 995錯(cuò)誤
  75. //    std::thread t([&io_service]() { io_service.run(); });

  76.     boost::asio::ip::tcp::resolver resolver(io_service);
  77.     auto endpoint_it = resolver.resolve({IP, PORT});

  78.     Client c(io_service);
  79.     c.doConnect(endpoint_it);


  80.     c.sendMsg("ssssss");
  81. //問(wèn)題2.異步讀沒(méi)有收到,如果改成boost::asio::read_some可以收到數(shù)據(jù)

  82.     std::thread t([&io_service]() { io_service.run(); });
  83.     t.join();
  84.    
  85.     //system("pause");
  86.     return 0;
  87. }
復(fù)制代碼

論壇徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龍
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥豬
日期:2014-04-01 08:56:02亥豬
日期:2014-04-08 08:38:58程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-07 06:20:00
2 [報(bào)告]
發(fā)表于 2016-03-20 16:31 |只看該作者
[this] 是什么意思啊,怎么從來(lái)沒(méi)見(jiàn)過(guò)?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2016-03-20 18:47 |只看該作者
回復(fù) 2# fender0107401


    lambda捕獲當(dāng)前類的指針,這樣回調(diào)函數(shù)就能訪問(wèn)類的成員了
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP