Это
std::string data = "Hello World!";
net::const_buffer buf(&data, sizeof(data));
неправильно. Вы хотите отправить содержимое строки data
, а не ее внутренние байты. &data
дает указатель на базовые данные экземпляра строки, а не ее содержимое. Если вы хотите создать буфер, который представляет содержимое data
, вы можете сделать:
const std::string data = "Hello World!";
net::const_buffer buf = net::buffer(data);
Этот
net::mutable_buffer buf;
while(buf.size() == 0)
{
socket.receive(buf);
}
дает вам бесконечный цикл, потому что начальный размер buf
равно 0, поэтому receive
читает 0 байтов и возвращает. Затем, когда условие проверено, размер буфера по-прежнему равен 0, и цикл продолжается.
Перед вызовом receive
вам необходимо указать размер буфера - он указывает, сколько байтов необходимо прочитать. Вы отправляете Hello World!
так
std::string msg;
msg.resize(12); // prepare space for incoming data
net::mutable_buffer buf = net::buffer(msg);
socket.receive(buf);
std::cout << "I got: " << msg << std::endl;