如果已经在某个地方得到了回答,我表示道歉,但我似乎无法在这里为我的生活找到合适的答案。
我的问题是:我正在开发一个带有以太网接口的嵌入式应用程序。即使我不知道设备的IP,我也需要能够在网络上发现这些设备并配置它们的IP。我的预期方法如下:
我已经(1)和(2)工作,尝试在PC上接收广播数据包时出现问题。我已经使用Wireshark验证了数据包实际上是否正确地进入了网络,所以使用boost时一定是错误的。
以下是我正在使用的代码片段:
using namespace boost::asio;
io_service my_io_service; // Create socket and IO service, bind socket to endpoint.
ip::udp::socket socket(my_io_service);
socket.open(ip::udp::v4());
ip::udp::endpoint localEndpoint(ip::address_v4::any(), HOST_PORT );
ip::udp::endpoint remoteEndpoint(ip::address_v4::broadcast(), DEVICE_PORT );
socket.bind( localEndpoint );
socket.connect( remoteEndpoint );
socket_base::broadcast option(true);
socket.set_option(option);
TXMessage.str("");
TXMessage << "RECQRE" << (i++);
socket.send(buffer(TXMessage.str().c_str(), TXMessage.str().length()));
len = socket.receive(buffer(RXBuffer, (BUFFER_SIZE-1)));
该应用程序只需锁定socket.recieve(...)调用。任何人都可以看到这个代码或配置的明显问题?我相信我有约束力和适当的联系,我知道我正在设置'广播'选项。
或者,如果您认为我的设备识别问题错了,我很高兴能够指出解决设备识别问题的替代方案。
修改 我已经检查过的事情: