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.

[参考译文] CC3120:为什么 UDP 套接字的 sl_Bind()失败?

Guru**** 2553530 points
Other Parts Discussed in Thread: CC3120

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/608229/cc3120-why-sl_bind-fails-for-udp-socket

器件型号:CC3120

我正在尝试按如下方式设置 UDP 客户端:

1.创建 UDP 套接字
2.将其连接到服务器地址
3.绑定到本地端口。

sl_Bind ()调用失败、使用 sl_error_bsd_EINVAL 代码。

当我省略步骤2 sl_Bind ()时成功。
当我切换步骤2和3时,即在连接之前执行绑定,sl_Bind ()成功。

CC3120配置为 STA 并连接到 AP、服务包 sp_3.3.0.0_2.0.0.0_2.2.0.4。

代码如下:

int foo()

   int32_t        sock;
   int32_t        status;
   SlSockAddr_t   *sa;            
   SlSockAddrIn_t sAddr;
   int32_t        addrSize;
   uint16         myPortNumber;
   uint32         myIpAddress;
   uint16         serverPortNumber;
   uint32         IpserverAddress;

   Sa =(SlSockAddr_t*) sAddr;
   addrSize = sizeof (SlSockAddrIn_t);
   sAddr.sin 系列= sl_AF_iNet;

   sock = sl_Socket (sa->sa_family、sl_sock_DGRAM、0);
   如果(sock < 0)
   {
       printf ("sl_Socket Failed:%d\r\n"、sock);
       返回0;
   }

   myPortNumber = 1414;
   myIpAddress = SL_INADDR_ANY;//SL_IPV4_VAL (192、168、103、140);
   serverPortNumber = 1515;
   serverIpAddress = sl_IPv4_VAL (192、168、103、39);

   sAddr.sin 端口= sl_Htons (serverPortNumber);
   sAddr.Sin_addr.s_addr = sl_Htonl (serverIpAddress);

   status = sl_Connect (sock、sa、addrSize);
   如果(状态< 0)
   {
       printf ("sl_Connect 失败:%d\r\n"、状态);
       返回0;
   }

   sAddr.sin 端口= sl_Htons ((uint16_t) myPortNumber);
   sAddr.Sin_addr.s_addr = sl_Htonl (myIpAddress);

   status = sl_Bind( sock、sa、addrSize);
   如果(状态< 0)
   {
       printf ("sl_Bind 失败:%d\r\n"、状态);
       返回0;
   }
   
   状态= sl_close (sock);
   如果(状态< 0)
   {
       printf ("sl_close 失败:%d\r\n"、状态);
       返回0;
   }

   返回0;

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

    对于只向服务器发送数据的 UDP 客户端,您不需要使用 sl_Bind()或 sl_Connect()。 只需使用 sl_Socket ()创建套接字,然后使用 sl_SendTo()将数据推出。

    请查看 SDK 中网络终端示例的 socket_cmd.c 的 UDPClient()函数、了解如何实现 UDP 客户端的示例。

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

    您好、Michael、

    sock_DGRAM 中的 connect()指定发送数据报的默认地址以及接收数据报的唯一地址。 bind ()用于为 sendto ()设置源 UDP 端口。 connect()和 bind()的用法对于无连接的套接字很常见。 此外、我有一个使用 bind ()和 connect ()的现有应用程序、我正在针对 CC3120对其进行修改、但它仍然需要与另一个 TCPIP 堆栈配合使用。

    此致、
    Michael

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

    我正在检查之前是否报告过此问题、以及 NWP 中是否存在一些错误行为、或者这是否是预期行为。 一旦我发现问题、我将在这里跟进您的问题。

    此致、
    Michael