У меня есть один сервер 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"