我正在尝试在我的应用程序中使用代码示例。在连接客户端发送“你好!”到服务器。服务器收到它并以某种方式回答它(并以“嗨,客户端!我是服务器!”结束消息) - 但这就是我所拥有的:服务器在通过telnet连接并发送内容之前不会收到任何信息。之后,它接收(打印)客户端和telnet消息。
客户端:
socket.connect(tcp::endpoint(tcp::v4(), 21), error);
if (error)
throw boost::system::system_error(error);
boost::asio::write(socket, boost::asio::buffer("Hello!\n"), boost::asio::transfer_all(), ignored_error);
for (;;)
{
boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
std::cout.write(buf.data(), len);
}
服务器:
for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket);
for (;;)
{
boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (buf[len-1] == '/n')
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
std::string a(buf.data());
}
std::string message = make_daytime_string();
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer("Hi, client! I'm server!"),
boost::asio::transfer_all(), ignored_error);
}
我害怕忘了要关闭的东西(比如插座)。但无论如何 - 和想法?
答案 0 :(得分:1)
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (buf[len-1] == '/n')
您对tcp::ip::socket::read_some()
read()
做了一些假设。
说明
read_some操作可能无法读取所有请求的数量 字节。如果您需要确保使用,请考虑使用not true 在阻塞操作之前读取请求的数据量 完成。
我建议您使用{{1}} read function作为文档建议。