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.

[参考译文] CC3100SDK:客户端在从接入点 cc3100传输数据时超时

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/633146/cc3100sdk-client-getting-timeout-while-data-transfer-from-access-point-cc3100

器件型号:CC3100SDK
主题中讨论的其他器件:CC3100

我正在将 cc3100配置为接入点。 移动电话充当客户端、即 STA、它将连接到接入点、即 CC3100并通过 FTP 执行文件下载。

我可以在大多数时间正确下载文件、但有时我会在移动客户端观察超时。 客户端套接字将超时。 (每10次迭代可重现一次超时)。

原因可能是什么? 我们在 cc3100上需要注意的是什么。 即 sl_send 的用法。 我将使用 sl_Send 以1K 大小的数据包连续传输文件数据。

 

在以下示例中、我们将数据包转储到 sl_Send 上并检查错误。 但不知道客户是否收到了它。

是否有方法检查移动客户端是否正确接收到传输的数据。 即 sl_Send 将等待客户端 STA 移动设备读取数据。

 

 

代码:

        #define  MAX_NUM_OF_TX_Bytes 1024

 

        uint8_t * pui8FileBuff =文件缓冲数据[40960];

        SlSockAddrIn_t tActiveRemoteAddr;   

         uint32_t ui32BufferOffset       = 0;

        uint16_t ui16BytesToBeTransfered = 0;

        //从命令获取数据端口的 IP 地址和端口号

         sscanf ((const char *) ms_ui8RxBuffer、"端口%d、%d、%d、%d、%d、%d "、iActIp[0]、&iActIp[1]、&iActIp[2]、&iActIp[3]、 (Int*)&iActPort[0],(int*)&iActPort[1]);

        iPortDec = iActPort[0]*256 + iActPort[1];

 

       #ifdef _emulator

         printf ("IP 为%d.%d.%d.%d\n"、iActIp[0]、iActIp[1]、iActIp[2]、iActIp[3]);

         printf ("port %d\n"、iPortDece);

       #endif

 

       //打开新套接字进行数据传输

       MS_i16DataAct = sl_Socket (sl_AF_iNet、sl_sock_stream、0);

       if (ms_i16SDataAct < 0)

       {

         #ifdef _emulator

           printf ("[TCP 数据套接字]创建套接字错误\n\r");

         #endif

         返回 EN_ERR_SOCKET;

       }//end of if (ms_i16SDataAct < 0)

 

       tActiveRemoteAddr.Sin_Family     = SL_AF_iNet;                                                      //IPv4套接字

       tActiveRemoteAddr.Sin_port       = sl_Htons ((_U16) iPortDec);                                       //客户端数据端口号

       tActiveRemoteAddr.Sin_addr.s_addr = sl_Htonl (sl_IPv4_VAL (iActIp[0]、iActIp[1]、iActIp[2]、iActIp[3]);//客户端数据端口 IP 地址

 

       if (sl_Connect (ms_i16DataAct、(SlSockAddr_t *)&tActiveRemoteAddr、(_U16) sizeof (SlSockAddr_t)< 0)

       {

         if (ms_i16SDataAct >= 0)

         {

           sl_close (ms_i16DataAct);//失败时关闭数据端口的套接字

           MS_i16DataAct =-1;

         }      

        }

     

        //循环以1K 大小的数据包传输文件数据。

        while (ui32BufferOffset < ui32NumofBytesRead)

       {

          ui16BytesToBeTransfered = MAX_NUM_OF_TX_BYIES;

          //检查要传输的剩余字节

          if (ui16BytesToBeTransfered >(ui32NumofBytesRead - ui32BufferOffset))

          {

             ui16BytesToBeTransfered = ui32NumofBytesRead - ui32BufferOffset;

          }

          i32NumOfBytesSent = sl_Send (ms_i16DataAct、(pui8FileBuff + ui32BufferOffset)、ui16BytesToBeTransfered、0);

          if (i32NumOfBytesSent < 0)

            返回 ERR_SL_SEND;

          //增加缓冲区偏移

          ui32BufferOffset += ui16BytesToBeTransfered;

          //需要为繁忙循环添加 NonOsMainloop

          _slNonOsMainLoopTask();     

       }//endof while

谢谢、此致、

Durga Prasad。

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

    您如何在移动端实施客户端? 我在这里假设 CC3100同时用作套接字的 AP 和服务器端。

    您是在主动发送数据时关闭套接字、还是在新数据可用时重复使用同一套接字? 如果在特定的时间内没有传输任何数据、TCP 套接字将关闭。

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

    给 Sarah:
    很抱歉、我不想打扰您、但您关于未传输数据时关闭 TCP 套接字的说法不正确。 为此、TCP 中的保持活动间隔。 在 CC3100中、保持活动间隔设置为5分钟、默认情况下启用。

    至杜尔加:
    Wireshark 软件监听 TCP 通信是确定正在进行的操作的良好起点。 在这种情况下、您将以 AP 模式将计算机用作连接到 CC3100的客户端。

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

    您好!

    抱歉、在上面的代码中缺少正在关闭的套接字 FD。 但我在发送数据后关闭套接字 FD。 CC3100充当 AP、IP 地址将相同、但端口号将不同。 我是否必须使用地址重用设置? 如果是、如何设置它?

    我不在设置保持活动设置的位置。 无论我是必须调用以下函数调用、还是默认情况下、它都在堆栈中内部设置。

     SlSockKeepalive_t enableOption;
     enableOption.KeepaliveEnabled = 1;
     SL_SetSockOpt (SockID、SL_SOL_Socket、SL_SO_KEEPALIVE、(_u8 *)&enableOption、sizeof (enableOption));

    谢谢、此致、

    Durga Prasad。

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

    您是否有一些说明堆栈中实现的 TCP/IP 超时错误的文档?

    是否有人遇到过类似的超时问题?

    谢谢、此致、
    Durga Prasad。