У меня есть сервер, который собирает информацию и транслирует некоторые сообщения по локальной сети. Я использую boost::asio
для передачи их через UDP через порт 8079, и я могу проверить с помощью WireShark, что эти пакеты действительно транслируются, как предполагалось.
Теперь, естественно, я хочу связаться со слушателем, который может реагировать на эти сообщения, но я изо всех сил пытаюсь получить что-нибудь. Мой текущий подход:
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
boost::asio::ip::udp::endpoint local(
boost::asio::ip::address::from_string("192.168.2.102"),
8079);
boost::system::error_code error;
std::cout << "Local bind: " << local << std::endl;
socket.open(boost::asio::ip::udp::v4(), error);
if(!error) {
socket.bind(local);
boost::array<char, 2048> buf;
boost::asio::ip::udp::endpoint server;
std::cout << "Listening..." << std::endl;
while(true) {
size_t len = socket.receive_from(boost::asio::buffer(buf), server);
std::cout << "Received data:" << std::endl;
std::cout.write(buf.data(), len);
std::cout << std::endl;
}
}
Но я никогда ничего не получаю. Используя отладчик, я обнаружил, что просто застрял в receive_from
навсегда, и я не знаю почему.
Некоторая дополнительная информация (в основном от Wireshark), о которой я не уверен, может ли это быть причиной следующих проблем: Сервер и клиент работают на одной машине. Сервер отправляет сообщение 88 bytes
каждые две секунды с порта 34050
(источник) на 8079
(пункт назначения). 192.168.2.102
- это IP-адрес аппарата в локальной сети.