【问题标题】:Client Mongoose C app to query LAN DNS?客户端 Mongoose C 应用程序查询 LAN DNS?
【发布时间】:2017-02-25 02:11:36
【问题描述】:

我正在 C 中试验 Cesanta 的 Mongoose 服务器/“客户端”网络库。这是在 Windows 7 x64 中使用 Pelle's C。我正在尝试在端口 90 上制作一个支持 LAN 的文本消息应用程序,作为两个以对话为主的可执行文件(服务器和客户端),以支持与服务器的 20 个连接。 FWIW,我正在使用快速计时器来调用 mg_mgr_poll(&mgr, 0),它保留了 UI 响应能力并且使用了很少的 CPU。

Cesanta 提供了很好的服务器通信设置示例,并且可以完美运行。我也可以让客户端连接到服务器,但是服务器的IP地址必须用mg_connect()

由于服务器的主机名对 LAN 是公开的,我希望向 LAN 询问该主机的 IP。不久前我在 VB 中工作过:

Dim host As New IPHostEntry
host = Dns.GetHostEntry(hostName)
Return host.AddressList.GetValue(0)

然而,随着 VB 项目变得越来越大,VB 变得陌生且困难得多,所以我迁移到了良好的旧 C。(也许它正在回退到 NetBIOS 名称查询,不知道。)不,我宁愿不迁移再次使用 C# 或 C++/VS。

关于 DNS 解析的 Cesanta documentation 相当模糊。像mg_connect(&mgr, "MyServerPC:90", ev_handler); 这样的代码只会崩溃,尽管mg_connect 表示它会尝试解析主机名。

能否 Mongoose 解析本地(LAN)主机名,以及如何?或者这是徒劳的,一切都应该在 Winsock 中手动完成吗?

【问题讨论】:

    标签: c networking dns host lan


    【解决方案1】:

    我和你有同样的问题。

    首先,我认为 mg_connect 不应该崩溃,只有当您尝试对返回的空连接做一些事情时。

    其次,mongoose 尝试使用 DNS 从注册表的特定位置解析地址,它会采用他能找到的第一个地址。

    位置是:SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters\\Interfaces ,在每个界面中检查这里。 我认为这里有一个错误(我将为它打开一个问题并尝试修复它并创建一个拉取请求)。
    小更新:
    我已经打开了一个问题并创建了一个关于这个问题的拉取请求。 https://github.com/cesanta/mongoose/issues/832
    https://github.com/cesanta/mongoose/pull/833

    Mongoose 检查每个接口的 NameServer 和 DhcpNameServer 的值,并返回它可以找到的第一个(非空),但如果它找到 NameServer 的空值,它不会检查 DhcpNameServer(因此错过了正确的地址),这将导致错误并将名称解析到默认服务器(我认为它是 google DNS -8.8.8.8)。

    您可以通过转到注册表并将您的 DNS 地址的值添加到注册表项-NameServer 来解决此问题

    这是来自猫鼬代码的评论:

        /*
         * See https://github.com/cesanta/mongoose/issues/176
         * The value taken from the registry can be empty, a single
         * IP address, or multiple IP addresses separated by comma.
         * If it's empty, check the next interface.
         * If it's multiple IP addresses, take the first one.
         */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多