工具/软件: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);
}