【问题标题】:Boost ASIO error "Host not found" on iOSiOS 上的 Boost ASIO 错误“找不到主机”
【发布时间】:2016-10-11 18:27:13
【问题描述】:

我有一个应用程序,它每秒通过本地网络发送一次多播消息。此代码在 Windows 和 macOS 上都可以正常工作,并且在 iOS 上也可以正常工作,除非网络未连接到互联网。

        boost::asio::ip::tcp::resolver resolver(m_IOservice);
        boost::system::error_code ec;
        boost::asio::ip::tcp::resolver::query query(boost::asio::ip::host_name(),"");
        boost::asio::ip::tcp::resolver::iterator it = resolver.resolve(query, ec);
        boost::asio::ip::address interface_ip_address;

        while(it!=boost::asio::ip::tcp::resolver::iterator())
        {
            interface_ip_address = (it++)->endpoint().address();
            if(interface_ip_address.is_v4())
            {
                // Message sending code here
            }
        }

问题发生在 resolver.resolve() 中,我得到一个异常,错误是“找不到主机(权威)”。

我不确定我是否真的理解为什么会发生这个错误,当然也不知道如何修复它。谁能帮我解释一下?

【问题讨论】:

  • 嘿,你在哪里可以让 boost asio 库在 iOS 设备上运行?它们是否会导致运行循环出现任何问题。
  • 是的,我们让它工作了,我们没有遇到任何问题。 boost 以太网代码在单独的线程中运行,然后将数据(以线程安全的方式)传递给主运行循环线程进行处理
  • 谢谢。为了清楚起见,您没有在 io_services 事件循环中调整任何内容? asio 获取数据,您只需将其传递给不同的线程。
  • 是的,就是这样。没有调整 io_services 事件循环。 Boost asio代码其实很简单,也很可靠。

标签: c++ ios boost boost-asio


【解决方案1】:

host_name 返回什么?它可能会返回一个无法解析的名称。

如果您只想要本地主机,请使用boost::asio::ip::addressv4() 甚至boost::asio::ip::address::from_string("127.0.0.1")

或者在您的/etc/hosts 文件中添加一个条目:

 127.0.0.1 thehostnametoresolvetolocalhost

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2020-09-11
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多