C++ Boost检查通过UDP接收的ip地址是否为本地地址

C++ Boost检查通过UDP接收的ip地址是否为本地地址,c++,boost,boost-asio,C++,Boost,Boost Asio,我如何跨越来自self的通过广播UDP发送的消息? 我需要跨越来自同一服务器的udp请求(发送广播时)。如何获取当前的IP地址? 以下是我尝试过的,但我从正确的接口获得的IP地址不是127.0.1.1: tcp::resolver resolver(mIoService); tcp::resolver::query query(boost::asio::ip::host_name(), ""); tcp::resolver::iterator iter = resolver.resolve

我如何跨越来自self的通过广播UDP发送的消息? 我需要跨越来自同一服务器的udp请求(发送广播时)。如何获取当前的IP地址? 以下是我尝试过的,但我从正确的接口获得的IP地址不是127.0.1.1:

 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.

谢谢

据我所知,没有可移植的解决方案。你的目标是什么平台?在最新的Unix上,您可能应该使用IFADRS,下面是一个(非常)虚拟的示例:

#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);
}
#包括
#包括
#包括
#包括
#包括
int
main()
{
IFADRS*ifap=0;
如果(获取IFADRS和ifap)!=0)
返回1;
对于(ifaddrs*iter=ifap;iter!=nullptr;iter=iter->ifa\U next)
{
std::ostringstream oss;
uint8_t*选项卡;
sockaddr_in*inet_addr;
如果(iter->ifa\U addr->sa\U family==AF\U INET)
{
inet\u addr=重新解释铸态(iter->ifa\u addr);
tab=重新解释铸件(&inet\u addr->sin\u addr.s\u addr);
对于(大小i=0;isin\u addr.s\u addr);+i)
{
如果(i!=0)

oss可能的复制品不是,在那些答案中有一个使用互联网的解决方案,但我不想使用这种方法,我想在局域网中使用该程序。