使用Asio

时间:2015-08-11 01:48:10

标签: c++ sockets udp boost-asio

我正在尝试接收通过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#编写的原始接收器的误解;一种我不太了解的语言。如果有帮助,我确实有这个来源。

0 个答案:

没有答案