Если кто-то может мне помочь, я не понимаю, как работает функция boost :: asio :: read в boost asio. В примере BOOST в них есть это объявить размер буфера до сообщения получено, которое не имеет смысла (как я знаю, сколько байт для чтения, прежде чем я прочитал сообщение?)boost :: asio :: read function hang
Я попробовал этот код, но он просто висит
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), "localhost", "3000");
tcp::resolver::iterator iterator = resolver.resolve(query);
tcp::socket sock(io_service);
boost::asio::connect(sock, iterator);
cout << "read start" << endl;
boost::system::error_code err_code;
// Read from client.
boost::asio::streambuf read_buffer;
int bytes_transferred = boost::asio::read(sock, read_buffer, err_code);
std::cout << "Read: " << make_string(read_buffer) << std::endl;
read_buffer.consume(bytes_transferred); // Remove data that was read.
Действительно ли это «повешение» или оно ожидает получения большего количества данных? – ForceBru
ожидает, когда данные войдут, но как я могу сказать, сколько байтов читать до того, как я его прочитал? – flashc5
Это отвратительный аспект сокетов (и TCP/IP). Они не могут сказать вам, сколько байтов данных является входящим. Вы должны использовать характер протокола, чтобы рассказать. Если вы создаете свой собственный протокол, у вас должен быть некоторый шаблон конца сообщения (например, «\ n») или заголовок сообщения, указывающий количество байтов. –