我有一台服务器,收集信息并通过本地网络广播一些消息。我使用
现在,自然而然的,我想要跟进一个监听器来响应这些消息,但是我无法接收到任何东西。我目前的方法是:
但是我从未收到任何信息。使用调试器,我发现自己一直卡在
以下是一些其他信息(主要来自Wireshark),我不确定它是否可能导致这些问题:服务器和客户端在同一台机器上运行。 服务器每两秒钟从端口
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),我不确定它是否可能导致这些问题:服务器和客户端在同一台机器上运行。 服务器每两秒钟从端口
34050
(源)向8079
(目标)发送一个88字节
的消息。 192.168.2.102
是本地网络中该计算机的IP地址。
ip::address_v4::any
作为本地终端点地址。 - Emile Cormierip::address_v4::any()
除了绑定到0.0.0.0:8079
外,不会改变任何东西。关于你的第二个问题,我认为需要使用bind
来指定要监听的端口,我错了吗? - nikolasip::address_v4::any
)意味着您不关心广播流量到达的接口是什么。 - Emile Cormier