如何从自身中覆盖通过广播UDP传来的消息? 我需要绕过来自同一台服务器的udp请求(发送广播时)。我怎样才能获得有效的IP地址? 这是我尝试过的,但是我得到了127.0.1.1,它不是来自正确接口的IP地址:
tcp::resolver resolver(mIoService);
tcp::resolver::query query(boost::asio::ip::host_name(), "");
tcp::resolver::iterator iter = resolver.resolve(query);
tcp::resolver::iterator end; // End marker.
谢谢!
答案 0 :(得分:0)
据我所知,没有便携式解决方案。您定位的平台是什么?在最近的Unix上你应该使用ifaddrs,这是一个(非常)虚拟的例子:
#include <ifaddrs.h>
#include <iostream>
#include <netinet/in.h>
#include <sstream>
#include <sys/types.h>
int
main()
{
ifaddrs* ifap = 0;
if (getifaddrs(&ifap) != 0)
return 1;
for (ifaddrs* iter = ifap; iter != nullptr; iter = iter->ifa_next)
{
std::ostringstream oss;
uint8_t* tab;
sockaddr_in* inet_addr;
if (iter->ifa_addr->sa_family == AF_INET)
{
inet_addr = reinterpret_cast<sockaddr_in*>(iter->ifa_addr);
tab = reinterpret_cast<uint8_t*>(&inet_addr->sin_addr.s_addr);
for (size_t i = 0; i < sizeof(inet_addr->sin_addr.s_addr); ++i)
{
if (i != 0)
oss << '.';
oss << static_cast<unsigned int>(tab[i]);
}
std::cerr << oss.str() << std::endl;
}
}
freeifaddrs(ifap);
}
这假定ipv4和所有,你可能需要调整它。