asio编写echo客户端(同步)(C++asio网络库相关)

asio官方库中的一个例子:

#include <cstdlib>
#include <cstring>
#include <iostream>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

enum { max_length = 1024 };

int main(int argc, char *argv[]) {
  try {
    if (argc != 3) {
      std::cerr << "Usage: main <host> <port>\n";
      return 1;
    }

    boost::asio::io_service io_service;

    tcp::socket s(io_service);
    tcp::resolver resolver(io_service);
    boost::asio::connect(s, resolver.resolve({argv[1], argv[2]}));
		for(;;) {
			// long time
			break;
		}

    std::cout << "Enter message: ";
    char request[max_length];
    std::cin.getline(request, max_length);
    size_t request_length = std::strlen(request);
    boost::asio::write(s, boost::asio::buffer(request, request_length));

    char reply[max_length];
    size_t reply_length =
        boost::asio::read(s, boost::asio::buffer(reply, request_length));
    std::cout << "Reply is: ";
    std::cout.write(reply, reply_length);
    std::cout << "\n";
  } catch (std::exception &e) {
    std::cerr << "Exception: " << e.what() << "\n";
  }

  return 0;
}

该例子使用同步编程方式只能用做测试

用cout<<write可以输出指定长度

同步程序都是一条线走下来的:连接-发送-接收

{argv[1], argv[2]}用了C++11中的构造方法本身希望传入query,直接调用了query的构造函数,只填机器名字有可能返回多个,填IP和端口号就没问题

resolve是一个很费时的过程,编写服务器时不要用这个同步形式的接口会卡死

发布了142 篇原创文章 · 获赞 34 · 访问量 2004

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104071411