Networking Asio简单客户机-服务器模型不返回响应

Networking Asio简单客户机-服务器模型不返回响应,networking,boost-asio,Networking,Boost Asio,第一次尝试在boost.asio上构建我的客户机服务器时,服务器对客户机的响应为空。 我不确定问题出在哪里-我很乐意提供任何帮助 服务器代码: const std::string message = "Hi"; boost::system::error_code ignored_error; try { boost::asio::io_service io_service; tcp::

第一次尝试在boost.asio上构建我的客户机服务器时,服务器对客户机的响应为空。 我不确定问题出在哪里-我很乐意提供任何帮助

服务器代码:

const std::string message = "Hi";
        boost::system::error_code ignored_error;
        try
        {
                boost::asio::io_service io_service;
                tcp::endpoint endpoint = tcp::endpoint(tcp::v4(), 12345);
                tcp::acceptor acceptor(io_service,endpoint);
                for (;;){
                        tcp::socket socket(io_service);
                        acceptor.accept(socket);
                   boost::asio::write(socket,boost::asio::buffer(message), ignored_error);
                }

        }
        catch (std::exception& e){
                std::cerr << e.what() << std::endl;
        }
const std::string message=“Hi”;
boost::system::error\u代码被忽略\u错误;
尝试
{
boost::asio::io_服务io_服务;
tcp::endpoint=tcp::endpoint(tcp::v4(),12345);
tcp::acceptor-acceptor(io_服务,端点);
对于(;;){
tcp::套接字(io_服务);
接受(套接字);
boost::asio::write(套接字,boost::asio::buffer(消息),忽略\u错误);
}
}
捕获(标准::异常&e){

std::cerr
socket.read\u some
将数据读入由
boost::asio::buffer(buf)
定义的缓冲区。 此缓冲区的大小由
buf.size()
确定。 在您的情况下,
std::string
为空, 因此,用于读取字节的缓冲区是空的。
read\u some
读取0字节并返回

由于服务器总是发送由2个字节组成的消息,因此可以调整
buf
的大小以容纳2个字节:

std::string buf;
buf.resize(2);
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error); 
// now read_some reads at most 2 bytes into buf
因为在服务器端创建了一个套接字,它发送消息,然后被销毁, 您可以使用
dynamic\u buffer
+
transfer\u all
+
boost::asio::read
读取非定长消息:

std::string buf;
size_t len = boost::asio::read (socket,boost::asio::dynamic_buffer(buf),
    boost::asio::transfer_all(),error);
if (len && error == boost::asio::error::eof)
{ 
  // data was read from server and eof is reached
  // do sth with buf
}
boost::asio::read
读取数据,直到缓冲区被完全读取或出现某些错误(例如
eof
-服务器端的套接字被关闭)。 服务器发送数据,客户端读取数据,服务器上的套接字被破坏,客户端从
asio::read
获取
eof

std::string buf;
size_t len = boost::asio::read (socket,boost::asio::dynamic_buffer(buf),
    boost::asio::transfer_all(),error);
if (len && error == boost::asio::error::eof)
{ 
  // data was read from server and eof is reached
  // do sth with buf
}