Я новичок в ASIO, и я пытаюсь получить относительно простую широковещательную рассылку UDP для работы, и я не вижу, чтобы какие-либо пакеты покидали мой компьютер в Wireshark. Есть ли конфигурация на io_service
или socket
, которой я не хватает? Вот мой полный код:Boost Asio не отправляет широковещательные пакеты UDP
#include <iostream>
#include <boost/asio.hpp>
#include <array>
using boost::asio::ip::udp;
namespace asio = boost::asio;
const char* idnMsg = "*IDN?;";
int main(int argc, char* argv[])
{
try
{
asio::io_service serv;
boost::system::error_code err;
udp::socket socket(serv);
socket.open(asio::ip::udp::v4(), err);
if (!err)
{
socket.set_option(udp::socket::reuse_address(true));
socket.set_option(asio::socket_base::broadcast(true));
asio::ip::udp::endpoint senderEndpoint(asio::ip::address_v4::broadcast(), 7777);
socket.send_to(asio::buffer(idnMsg, 6), senderEndpoint);
//socket.close(err);
std::array<char, 128> buf;
while (socket.available())
{
asio::ip::udp::endpoint remote;
size_t len = socket.receive_from(asio::buffer(buf), remote);
std::cout << "Received: ";
std::cout.write(buf.data(), len);
buf.fill(0);
}
}
else
std::cerr << "Error connecting: " << err.message() << std::endl;
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
return 0;
}
Вы можете заметить, что он имеет поразительное сходство с комбинацией ASIO примера и another SO answer.
Я использую Boost.Asio от NuGet в Visual Studio 2015 в Windows 7 x64. Если переключение на ручной скомпилированный автономный Asio поможет, я сделаю это. В любом случае, я планирую сделать это в будущем, так как мне не нужно для дальнейшего повышения моих текущих планов.
Как я уже сказал, я не видел, чтобы пакеты не покидали мой компьютер в Wireshark, и у меня даже было несколько устройств в моей сети, которые отвечали бы на этот пакет, и я не видел ответов.
EDIT: Этот код с автономным ASIO в Linux работает нормально. Но я буду нуждаться в ASIO, работающем в Windows, если в конце концов я буду отправлять код с ним; кросс-платформа отличная, и я нацелен на это, но Windows - самый большой рынок.
Это возвращение 6; поэтому Asio утверждает, что отправил 6 байтов. Я использовал фильтр 'udp и src или dst-порт 7777', чтобы увидеть выход пакета или ответ, возвращенный, и он был пустым; нет пакетов. Я попробую скомпилировать его с автономным Asio и посмотреть, работает ли это. – PrinceBilliard