我们还需要另一端用于通信,即一个请求服务器的客户端。基本结构与我们为服务器所做的相同。
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
using ip::tcp;
using std::string;
using std::cout;
using std::endl;
这些导入与我们为服务器所做的相同。没有什么新的。
int main() {
boost::asio::io_service io_service;
//创建socket
tcp::socket socket(io_service);
//连接
socket.connect( tcp::endpoint( boost::asio::ip::address::from_string("127.0.0.1"), 1234 ));
// 客户端请求/消息
const string msg = "Hello from Client!\n";
boost::system::error_code error;
boost::asio::write( socket, boost::asio::buffer(msg), error );
if( !error ) {
cout << "客户端发送了hello消息!" << endl;
}
else {
cout << "发送失败: " << error.message() << endl;
}
// 从服务器获取响应
boost::asio::streambuf receive_buffer;
boost::asio::read(socket, receive_buffer, boost::asio::transfer_all(), error);
if( error && error != boost::asio::error::eof ) {
cout << "接收失败: " << error.message() << endl;
}
else {
const char* data = boost::asio::buffer_cast<const char*>(receive_buffer.data());
cout << data << endl;
}
return 0;
}
我们再次通过创建io_service对象和创建socket开始。我们需要使用localhost(IP 127.0.0.1)连接到服务器,并指定与服务器相同的端口,以成功建立连接。一旦连接建立,我们使用boost::asio::write发送一个hello消息到服务器。如果消息传输成功,服务器将发送响应。为此,我们有boost::asio::read函数来读取响应。现在让我们运行我们的程序,看看实际情况。
通过执行以下命令编译和运行服务器
$ g++ server.cpp -o server –lboost_system
$ ./server
移至另一个终端窗口以运行客户端。
$ g++ client.cpp -o client –lboost_system
$ ./client
观察上面输出的工作流程。客户端通过向服务器打招呼发送其请求,然后服务器以回复打招呼。数据传输完成后,连接关闭。