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.

[参考译文] CCS/LAUNCHCC3220MODASF:接收 NULL 而不是所需的数据"Wi-Fi STA 模式"

Guru**** 2554840 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/920336/ccs-launchcc3220modasf-receiving-null-instead-of-the-desired-data-wi-fi-sta-mode

器件型号:LAUNCHCC3220MODASF

工具/软件:Code Composer Studio

我在本地网络中使用 TCP 通过 WiFi 在两个 CC3220板之间交换数据包。 代码工作正常、我在发送和接收1460字节时正确交换数据、如果我将数据长度增加到1460字节以上、它将接收0、然后接收正确的数据、再接收0、依此类推。

问题:
1.路由器是否是导致此问题的原因,因为它限制了否 发送和接收的字节数量?
2.如果没有,那么为什么会出现这个问题?  

P.S.两个板都本地连接到 ADSL 路由器

P.S.当我尝试通过互联网、一个 Launchpad 到 ADSL 路由器、另一个到移动热点进行通信时、也发生了同样的问题、当我将数据长度缩小到1300时、没有收到 NULL 就可以正常工作了

您可以找到以下代码:

服务器:

PacketSocket = sl_Socket (sl_AF_iNet、sl_sock_stream、0);
如果 (0 > PacketSocket) { UART_PRINT ("创建套接字时出错");}



SockSettings.Sin_Family = SL_AF_iNet;
SockSettings.Sin_port = sl_Htons (1040);
SockSettings.sin_addr.s_addr = sl_Htonl (SocketServerIpAddr);


return= sl_SetSockOpt (PacketSocket、sl_SOL_Socket、sl_SO_NONBLOCKING、(_u8*)& BlockingOption、sizeof (BlockingOption));
如果 (返回< 0) {UART_PRINT (在启动 SSS 1\n\r\n 时出现错误);}
状态= sl_Bind (PacketSocket、(SlSockAddr_t *)和 SockSettings、sizeof (SlSockAddrIn_t));
如果 (!状态) {UART_PRINT ("无错误绑定");状态= SL_Listen (PacketSocket、1);}
其他 { UART_PRINT ("存在错误绑定");}
如果 (!状态)
{ UART_PRINT ("无错误侦听");
}
RetreivedConnectedSocket = SL_ERROR_BSD_EAGAIN;
//
//
while (0 > RetreivedConnectedSocket)
{
RetreivedConnectedSocket = sl_accept (PacketSocket、(SlSockAddr_t *)&WiFi_Config.SockSettings、(SlSocklen_t*)&AddrSize);

如果 (RetreivedConnectedSocket < 0)
{
if (RetreivedConnectedSocket = SL_ERROR_BSD_EAGAIN)
{
睡眠(1);
};
UART_PRINT ("noo connection\n\n");
}
}

return= sl_SetSockOpt (RetreivedConnectedSocket、sl_SOL_Socket、sl_SO_NONBLOCKING、(_u8*)&BlockingOption、sizeof (BlockingOption));
如果 (返回< 0) {UART_PRINT (在启动 SSS 2\n\r\n 时出现错误);} 
while (1)
{ RxStatus = sl_Recv (RetreivedConnectedSocket、DataReceived、1460、0); TxStatus = SL_Send (RetreivedConnectedSocket、 DataSent、1460、0);

客户端:

PacketSocket = sl_Socket (sl_AF_iNet、sl_sock_stream、0);
如果 (0 > PacketSocket) { UART_PRINT ("创建套接字时出错");}



SockSettings.Sin_Family = SL_AF_iNet;
SockSettings.Sin_port = sl_Htons (1040);
SockSettings.sin addr.s_addr = sl_Htonl (SocketServerIpAddr);
return= sl_SetSockOpt (PacketSocket、sl_SOL_Socket、sl_SO_NONBLOCKING、(_u8*)&BlockingOption、sizeof (BlockingOption));
如果 (返回< 0) {UART_PRINT (启动 SSS 时出现"\n\n\r 错误1\n");}
状态= SL_ERROR_BSD_EALREADY;
while (0 >状态)
{
STATUS= SL_Connect (PacketSocket、(SlSockAddr_t *)和 SockSettings、sizeof (SlSockAddrIn_t)<0);
如果 (状态< 0)
{
UART_PRINT ("错误连接并将重试");
}
}

while (1)
{ TxStatus = sl_Send (PacketSocket、DataSent、1460、0); RxStatus= SL_Recv (PacketSocket、 DataReceived、1460、0);

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

    您好!

    您的套接字代码不正确。 如果使用了非阻塞套接字,则可以从sl_Send()或sl_Recv() API 获得 sl_error_bsd_EAGAAIN (=-11)。 您的代码中缺少此部件。

    1月

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

    这不是我的问题原因。 我已经在 while 循环中调用 SEND 和 Receive、我不想停止代码流和执行以确保发送和接收正确、因为我始终在发送和接收。 这不是我的问题解决方案、因为我可以看到、当我通过本地网络将数据长度增加到1460以上、通过互联网将1300以上时、会出现一种非常奇怪的行为。

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

    您好!

    如果使用非阻塞套接字、则此方法与 while 循环不正确、无法正常工作。 这只能用于阻塞套接字。 如果要使用非阻塞套接字、则需要重新设计代码。

    1月