This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220SF:如何按域名访问 CC3220 MQTT 代理/服务器?

Guru**** 2562120 points
Other Parts Discussed in Thread: CC3220SF

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/785937/cc3220sf-how-to-access-cc3220-mqtt-broker-server-by-domain-name

器件型号:CC3220SF

您好!

我正在使用"simplelink_cc32xx_sdk_2_30_00_05"、我正在 CC32200器件之间进行 MQTT 通信、其中所有器件共享相同的 NW。 但我不想使用网关在重置/替换网关上多次更改的服务器的 IP 地址。

那么、我想创建一个静态域名、如"example.com、如何在 CC3220中执行此操作?   

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我不熟悉 MQTT 示例。 但是在主机驱动程序中是 sl_ API sl_NetAppDnsGetHostByName()。 此 API 可用于解析主机名。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    您建议的答案是 DNS 服务器模式。
    现在、我的器件处于 STA 模式、这是如何实现的?
    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    -如果您要使用 DNS,DNS 服务器需要在您的网络基础结构上运行。
    - CC32xx 器件之间的"通信"的另一个选项可以是使用 mDNS。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、  

    我尝试在 MQTT 代理中执行以下操作

    SL_NetCfgGet (SL_netcfg_IPV4_STA_ADDR_MODE、&ConfigOpt、&ipLen、
    (uint8_t *)&IPv4);
    
    DestinationIP = IPv4.IP;
    
    UART_PRINT ("我的 IP 为%d.%d.%d.%d.%d\n\r\n"\
    SL_IPV4_BYTE (DestinationIP、3)、\
    SL_IPV4_BYTE (DestinationIP、2)、\
    SL_IPV4_BYTE (DestinationIP、1)、\
    sl_IPv4_byte (DestinationIP、0));
    
    int res1 = sl_NetAppDnsGetHostByName ("www.myti.com、strlen ("www.myti.com)、&DestinationIP、sl_AF_iNet);
    uart_print ("res1 =%d \r\n"、res1); 

    在打印中、我正在获取 IP、RES1也在打印成功代码"0"。

    但是当我尝试从我的客户机上发布消息时、我将获得相同的 NW  

    "错误:连接是最后一个。"

    使用 IP 地址发布也是如此

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不理解您的代码。 这毫无意义,特别是您所说的 DestinationIP 变量。

    您应该首先检查是否从 sl_NetAppDnsGetHostByName() API 调用返回了正确的 IP 地址。 您可以将其与计算机中的 DNS 查找进行比较。 之后、您可以根据需要在代码中使用此 IP。 如果要在 LAN 外部发送数据、请不要忘记该网关、需要在 CC32xx 器件上正确配置子网掩码。

    BTW... 您是否在文档中阅读sl_NetAppDnsGetHostByName(了) API 的用途? 此 API 用于从域名获取 IP、而不是从域名获取 IP。

    请阅读 wiki 页面 、了解 DNS mDNS 的工作原理。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    e2e.ti.com/.../WiresharkDebug.zip

    我尝试使用 Wireshark 进行调试、请找到用于调试信息的附件

    我在 www.myti.com 上发布的 MQTT 服务器 IP 为"192.168.225.215"

    我尝试发布的客户端为"192.168.225.104"、使用 IP 地址成功发布。 当我发布到主机“www.myti.com”时,目标 IP 在 Wireshark 中显示“216.157.88.26”。

    请告诉我任何解决方案。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我旁边的 Internet 中“www.myti.com”的 IP 地址是216.157.88.23,您可以得到216.157.88.26。 这看起来正常、因为两个地址都在同一子网中。 这种差异可能是由于不同的位置和使用不同的 DNS 缓存服务器造成的。 结果:您的旁边的 sl_NetAppDnsGetHostByName()正常工作,并且您可以从 DNS 查找中获得正确的 IP

    老实说、我不确定您是否真正了解 DNS 的工作原理以及 GetHostByName 的用途。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    我需要 IP 的域名、我在此主题中清楚地说明了这一点。
    我的需求:我有 Dev1 MQTT 服务器。
    我有 Dev2、Dev3和 Dev4是 MQTT 客户端。
    所有4个都连接到我的第三方 GTWE/WiFi-AP。
    在此网络中、我想使用 服务器名称(如"">http://example.com")执行 MQTT Pub 或 Sub、该名称由 IP "192.168.225.215"获取

    我认为,如果是如何做到这一点,这是很清楚的?
    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我在第二篇帖子中回答了这个问题。 您有两个选项:

    -您可以使用 DNS 来实现此目的,但需要在网络基础结构中设置 DNS 服务器

    -您可以使用 mDNS/Bonjour 或您自己实施的其他一些零配置协议。 mDNS 受 CC3220器件支持(请参阅 9章中的 swru455)。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    您能否简单介绍一下所花时间较短的情况、以及如何实现您的建议之一。 我对 DNS 和 mDNS 的了解较少。
    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这取决于您的要求和能力(如果您和您的客户在设计商用器件时)。 但简短地讲几个提示、因为我无法(也不想)向您解释 DNS 或 mDNS 的工作方式。 这需要您自己学习(您应该这样做)。

    -使用 DNS 的最快方式,但您需要能够在网络基础设施上配置 DNS 服务器。 这意味着您需要拥有具有此功能的网络基础架构、并且您需要了解如何设置此功能。 如果您为网络领域知识水平较低的用户设计商用设备、这种方法可能会有问题。

    - mDNS 的使用稍微复杂一些(也需要在服务器上集成为客户端代码)。 但 mDNS 的使用稍微更普遍。 SWRU455介绍了如何使用 mDNS、SDK 中的 serial_wifi 示例演示了如何使用 mDNS。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    感谢您的建议。
    我们正在为客户执行此操作。 我正在使用我们最近使用 CC3220MODASF 制造的原型。 我必须以任何成本实现这一点、您能不能再简单介绍一下 SDK 中的 serial_wifi 示例。

    在哪里可以找到 SWRU455?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在前面的回答中已经提供了 SWRU455的链接 、您也可以使用 google

    开始时,您应该会看到 API  sl_NetAppDnsGetHostByService()和  sl_NetAppMDNSRegisterService()

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    谢谢你。
    您能不能帮助我使用我的 PC 上的"DNS" ping CC3220中运行的"serial_wi"示例项目、这两个项目共享相同的 NW。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    有关 mDNS 的所有信息、请访问 SWRU455。

    -Windows 本身不支持 mDNS 协议。 在 Windows 平台上、您需要使用第三方应用程序(Windows 仅在内部支持 LLMNR 协议)。
    - Apple 设备(MAC、iPhone)完全支持 mDNS
    -在 Android 中、您需要使用第三方应用程序通过 mDNS 查找设备

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    感谢您提供信息。

    我正在使用 Android 应用程序"服务浏览器"来查看本地 NW 中可用的 mDNS 服务。

    当我运行"serial_wifi"示例时、我可以看到名称

    "_http_tcp.(万维网 HTTP)"和应用中的"_UART.._tcp"。

    我尝试了以下更改

    #define SERILWIFI_DNS_NAME         "mytest.local"         /*(在"CC32xx._UART._tcp.local"之前)*/

    其中 sl_NetAppDnsGetHostByService 和 sl_NetAppMDNSRegisterService 使用相同的服务名称"SERIALWIFI_DNS_NAME"

    我的名字"mytest.local"有什么问题? 我的应用程序看不到这种情况。

    如何 ping 相同的命令? 我的意思是服务名称 "CC32xx._UART._tcp.local"、我必须 ping 什么 URL。

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不熟悉此 Android 应用程序、因此我无法帮助您处理此第三方应用程序。

    RFC 6762中提供的 mDNS 协议规范

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    我尝试从 Android 设备 ping (查询)到"serial_wi"示例、但获取响应未知主机。
    您可以帮助 ping "serial_wi"示例项目吗? 按 mDNS 服务名称"mytest.local"。

    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果操作系统本身(Windows、Android)不支持 mDNS、则无法 ping 通域名.local。 在此平台上,您需要按第三方应用程序查找 IP,并使用此 IP 进行 ping 操作。 在 Widnows 中、是由 LLMNR 协议而不是 mDNS 解析的.local 地址。 如果您需要在 Windows 中解析本地.local、则需要自行将 LLMNR 实施到 CC3220中。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    您能帮助使用 IOS 进行测试吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我没有 iOS 设备。 但是、.local 地址应该在 Apple 设备上得到解决、而不会出现任何问题。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    我可以从 Windows10 PC 共享相同的 NW 中、通过主机名"mytest.local"来连接到我的 cc3220 MQTT 代理/子代理。

    现在、我尝试使用 SERVER_ADDRESS 将 CC3220 MQTT 客户端连接到同一代理 “neciot.local”,但却得到了
    "连接到代理失败、错误代码:-2006"

    相同的设置在 IP 地址上工作正常。
    你有什么建议。

    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    -您使用什么 API 来解析 CC3220 MQTT 客户端内的.local 地址? 是否使用 sl_NetAppDnsGetHostByService()?
    -如何在 Windows 10设备上解析 mytest.local? 您使用什么构建的 Windows 10?

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Hnz、
    我没有使用本主题中讨论的任何 mDNS API。
    我只是更改了我的 cc3220 MQTT 代理中的以下内容

    ConfigureSimpleLinkToDefaultState(){
    ……………
    unsigned char devicestr[32]="mytest";
    unsigned char domainstr[32]="www.mytest.net";
    三、会议的报告


    在"Windows10 pro"中使用蚊虫与宿主"mytest.local"在我的经纪人处进行酒吧/子服务
    我在另一个 CC3220 MQTT 客户端中尝试了相同的操作、其中 pub/subt 使用服务器名称"mytest"工作正常

    这在 NW 中工作、我的所有设备都是基站。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您引用的是 SDK 中的哪个确切示例? 我无法在任何示例 SDK 示例中找到字符串 devicestr[]和 domainstr[]。 要在 CC3220解析.local 地址、您需要使用 mDNS

    NetApp 选项 SL_NetApp_DEVICE_domain 仅用于 AP 模式。 请参阅 SWRU455第3.10章。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    我正在使用"simplelink_cc32xx_sdk_2_30_00_05"、您可以在配置任务中找到。

    是的、您是写入的、我应该使用 mDNS、但它看起来很复杂。 因此、当它使用 DNS 时、我认为它是可以的。
    但无论如何、我也会寻找 mDNS。
    我不知道如何对"serial_wi_CC3220SF_LAUNCHXL_tirtos_ccs"项目执行简单的 ping 操作。 我尝试过 IOS、Linux、Windows 和 Android。 所以、如果您/某个人执行了该操作、请告诉我。
    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    字符串 devicestr[32]和 domainstr[32]不包含在2_30_00_05 SDK 的任何文件中。 我想这是你的修改。 但这并不重要、因为 CC3220中的域名仅在 AP 模式下相关、并且您希望使用 STA 模式。

    DNS 应该可以与 MQTT 客户端配合使用、但此解决方案将取决于您的基础设施中的 DNS 服务器。

    1月