Увеличьте отправку сокета asio на другой IP-адрес - PullRequest
0 голосов
/ 29 мая 2019

У меня есть один сервер udp, получающий сообщения от нескольких удаленных клиентов. Когда он получает одно сообщение, я копирую конечную точку и отвечаю клиенту с того же IP-адреса на порт 5000, где слушает каждый клиент.

Я испробовал несколько стратегий отладки, и печать конечной точки непосредственно перед отправкой ответного сообщения дает мне правильный IP-адрес и порт.

Отправитель:

    std::cout << udp_remote_endpoint.address().to_string();
    std::string str(packet.begin(), packet.end());
    std::cout << str << std::endl;
    io_service.post(
        [this, packet]()
        {
            udp_socket.async_send_to(
                boost::asio::buffer(packet),
                udp_remote_endpoint,
                boost::bind(
                    &uds::handle_write,
                    this,
                    boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred
                )
            );
        }
            );

На приемнике я получаю udp_remote_endpoint и перед отправкой устанавливаю конечную точку сокета:

    new_addr.endpoint = socket.get_udp_remote_endpoint();
    new_addr.endpoint.port(5000);
    socket.set_udp_remote_endpoint(new_addr.endpoint);

Например, этот вывод:

192.168.1.131K-131-1559147491761155

На самом деле отправляет на IP 192.168.1.130. Содержимое сообщения верное "K-131-1559147491761155"

1 Ответ

0 голосов
/ 31 мая 2019

Решено!

Я удалил io_service.post и все заработало!

`std::cout << udp_remote_endpoint.address().to_string();
std::string str(packet.begin(), packet.end());
std::cout << str << std::endl;
//io_service.post(
//    [this, packet]()
//    {
        udp_socket.async_send_to(
            boost::asio::buffer(packet),
            udp_remote_endpoint,
            boost::bind(
                &uds::handle_write,
                this,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred
            )
        );
//    }
//);`
...