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是一个很费时的过程,编写服务器时不要用这个同步形式的接口会卡死