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.

[参考译文] TDA2EX17EVM:TDA2ex 上的 IPv6 UDP 发送功能故障

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/675961/tda2ex17evm-ipv6-udp-sendto-function-failure-on-tda2ex

器件型号:TDA2EX17EVM

大家好、

我正在与 TDA2ex 合作、并尝试为其分配 IPv6地址、并在其上开发 UDP 客户端以与 IPv6 UDP 服务器通信。

我已按照此帖子中的建议进行了更改、我可以获取本地链接地址、并且可以从我的 PC ping 它。 现在、当我开始创建 IPv6 UDP 时
套接字我可以创建它、但当我调用 sendto 函数时、它返回-1、并且我知道它是由 errno 22引起的、这是无效的参数。

https://e2e.ti.com/support/arm/automotive_processors/f/1021/t/673201?tisearch=e2e-sitesearch&keymatch=IPV6%20retrieve

我已验证 sin6_family、sin6_port 和 sin6_addr 具有正确的服务器值。

我在 TI RTOS 软件包中参考了 UDPEchoIPV6示例、我了解到我们传递的 sendto 函数是 saddr_storage 结构、而不是 saddr_in6
这就是为什么我在我的应用程序中进行了相关更改、但仍然返回22。

什么可能是错误的参数,我有以下问题:

1)使用本地链接地址,我是否需要初始化 sendto 函数的 saddr_in6的 scope_id 成员?

2)我参考了 UDPEchoIPV6示例代码,但它用于 UDP IPv6服务器,我们是否有任何示例代码 UDP IPv6客户端?

感谢您的任何建议。

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

    您正在使用哪个版本的 NDK?

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

    尊敬的 Kapil:

    [引用用户="Kapil Mehta"]

    1)使用本地链接地址,我是否需要初始化 sendto 函数的 saddr_in6的 scope_id 成员?

    [/报价]

    不需要、您不必初始化它。

    [引用用户="Kapil Mehta"]

    2)我参考了 UDPEchoIPV6示例代码,但它用于 UDP IPv6服务器,我们是否有任何示例代码 UDP IPv6客户端?

    [/报价]

    目前、我们不提供任何 UDP IPv6客户端示例。

    您能否在打开套接字并调用 sendto ()的位置发布代码以便我可以查看它?

    谢谢、
    Gerardo

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

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

    e2e.ti.com/.../IPV6UDPClient.c

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

    您好 Gerardo、
    在此、我将共享两个接口、用于创建套接字并通过套接字发送数据。 我将调用 create、然后是 write interface。
    sendto 的返回值为22。 我已经验证了 inet_pton 返回成功、并验证了在 in6_addr 结构中填充了正确的端口和地址。

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

    几个方面、您使用的端口号太高、这应该是一个16位数字、并且您使用的端口号大于该值。 此外,在调用 sendto ()之前是否调用 connect(),以便套接字处于已连接状态?

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

    您好 Gerardo、

    很抱歉,我错误地说,

    #define SERVER_PORT 500002

    但实际上是这样  

    #define SERVER_PORT 50002, 它应该是有效的端口值。

    关于连接,我认为 UDP 是可选的,如果我使用 sendto,我不需要它。如果我错了,请纠正我的错误。

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

    实际上、是的、您在那里是正确的。 我想尝试的一件事是、您能否尝试解压缩您的 IP 地址、看看它是否会发生任何变化。

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

    我n´t 尝试了另一个虚拟地址,即 abcd:abcd:abcf:dfed:123E:12de:12fc:12ed,它没有工作,从 sendto 给出了-1,错误号为22

    n´t 该地址确实存在、但我认为对于 UDP 而言不是必需的。 我已经在 PC 上测试了相同的接口、它可以正常工作。

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

    我认为问题在于我填充 sockadd_in6结构的方式、我使用 getaddinfo 函数填充结构、现在工作正常。

    感谢你的帮助。