我正在尝试接收通过UDP发送到发送数据的应用程序启动时随机选择的四个端口之一的消息。这是我目前拥有的代码,但在任何端口上都没有收到任何数据。我不能改变它使用单个端口,因为它不是我自己的程序,我无法访问源。
using boost::asio::ip::udp;
static char *port[] = {"54997", "34997", "57997", "58997"};
std::vector<udp::socket> sockets;
boost::asio::io_service io_service;
void getsockets()
{
for (int i = 0; i < 4; i++)
{
sockets.emplace_back(udp::socket(io_service));
boost::asio::ip::udp::endpoint local(boost::asio::ip::address_v4::any(), (unsigned short)strtoul(port[i], NULL, 0));
sockets.back().open(boost::asio::ip::udp::v4());
sockets.back().bind(local);
}
io_service.run_one();
}
int main()
{
getsockets();
while (true)
{
for (int i = 0; i < 4; i++)
{
while (sockets[i].available() > 0)
{
boost::array<char, 128> recv_buf;
boost::asio::ip::udp::endpoint server;
int len = sockets[i].receive_from(boost::asio::buffer(recv_buf), server);
std::cout.write(recv_buf.data(), len);
}
io_service.run_one();
}
}
std::cin.ignore();
return 0;
}
如果我的代码看起来很好,可能是我对用C#编写的原始接收器的误解;一种我不太了解的语言。如果有帮助,我确实有这个来源。