我正在尝试使用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达到相同的效果?
答案 0 :(得分:0)
因此,多亏了tkausl我才知道问题出在输出插接式初始化。如果您希望系统为您分配一个空闲端口,只需创建一个新的端点即可将该端口设置为0。
_socketOut = std::make_shared<udp::socket>(_ioServiceOut, new udp::endpoint(address::from_string(Loopback), 0));