从本地端口向本地端口发送UDP数据

时间:2018-10-04 10:00:30

标签: c++ boost boost-asio

我正在尝试使用UDP数据包将数据发送到我自己的本地端口。

为此,我使用boost :: asio

#include <iostream>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>

using boost::asio::ip::udp;
using boost::asio::ip::address;

boost::asio::io_service _ioServiceOut;
std::shared_ptr<udp::socket> _socketOut;
std::shared_ptr<udp::endpoint> _endpointOut;

static int PortOut = 32676;
static std::string Loopback = "127.0.0.1";

int main()
{
    _endpointOut = std::make_shared<udp::endpoint>(address::from_string(Loopback), PortOut);
    _socketOut = std::make_shared<udp::socket>(_ioServiceOut, *_endpointOut.get());


    _socketOut->send_to(
        boost::asio::buffer("0"), *(_endpointOut.get())
    );

    return 0;
}

问题是,它从32676发送到32676,而我正在侦听此端口的其他应用程序则无法接收到消息。

在C#中编写类似的应用程序时,Net.Socket会将随机端口分配为输出端口。 我如何通过boost :: asio达到相同的效果?

enter image description here

1 个答案:

答案 0 :(得分:0)

因此,多亏了tkausl我才知道问题出在输出插接式初始化。如果您希望系统为您分配一个空闲端口,只需创建一个新的端点即可将该端口设置为0。

_socketOut = std::make_shared<udp::socket>(_ioServiceOut, new udp::endpoint(address::from_string(Loopback), 0));