ребята, мне действительно нужна ваша помощь. Я изучаю boost :: asio и у меня есть 2 проблемы, которые я не могу делать за день ...
ЗДЕСЬ ЯВЛЯЕТСЯ ПРИМЕР ПРОСТОГО СЕРВЕРА, КОТОРЫЙ СДЕЛАЛ САМ
int main(
{
// crate a server, binding it and listening connections
// acceptor server;
//socket client
server.async_accept(client, boost::bind(accept_handle, _1, &server, &client));
io_service.run();
return 0;
}
void accept_handle(const boost::system::error_code& eCode, boost::asio::ip::tcp::acceptor* server, boost::asio::ip::tcp::socket* client)
{
char data[43];
client->async_read_some(boost::asio::buffer(data, 20), boost::bind(read_handle, _1, _2, server, client));
}
void read_handle(const boost::system::error_code& eCode, size_t bytes)
{
char data_buf[20] = "hello";
client->async_write_some(boost::buufer(data, 5), boost::bind(write_handle, _1, _2, server, client));
}
void write_accept(const boost::system::error_code& eCode, size_t bytes)
{
boost::asio::ip::tcp::socket newConnection(server->get_ioservice)); // taking he io_service of the server
server->async_accept(newConnection, boost::bind(accept_handle, _1, server, client));
}
ПРОБЛЕМА Сервер принимает одного клиента и не принимает другого ожидающего клиента .. где я делаю неправильно здесь ПРИМЕЧАНИЕ ... Я написал этот код в блокноте, так что извините за ошибки sintax, если есть некоторые заранее спасибо за помощь!!!
accept_handle
должен создавать новый сокет и запускать на нём async_accept
после того, как запустит асинхронное чтение на старом сокете. Если у вас с++11, сокеты можно перемещать, если c++98 - проще всего использовать boost::shared_ptr для управления временем жизни сокета.
В accept_handle
и read_handler
у вас потенциальная проблема: вы создаёте буфер на стеке, запускаете асинхронную операцию, после чего выходите из функции не дожидаясь завершения асинхронной операции. Можно считать, что буфер будет удалён и асинхронная функция при работе с ним будет работать неверно. Для борьбы с этом буфер нужно либо напрямую создавать в динамической памяти, либо как поле класса.
P.S. Чем вам примеры из документации не нравятся? Они вполне нормально работают и позволяют добавлять нужный вам функционал.
P.P.S. Если вы хотите получить пакет именно нужного вам размера, используйте asio::async_read(socket, buffer, handler)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Обычно, всплывающие подсказки реализуются посредством заполнения структуры NOTIFYICONDATA + передачей это структуры в функцию Shell_NotifyIconAЕсли у экземпляра...
Помогите пожалуйста с плагином для JqueryЗадание следующее: Необходимо написать плагин для jQuery, который каждые 30 мс собирает данные о положении...
Каким образом можно подрезать подвал? border-bottom-left/right-radius не даёт никакого результатаНужно сделать примерно так, как на картинке: