本人打算用CC3200(A)发送TCP数据包给CC3200(B),他俩都作为STA模式连接在路由上,能够正常收,但是速度特别慢,几乎1分钟只能收到0.1mb,我试着将发送端每次发送的包调的大一点,结果还是一样的速度,为了排除每次断开重连的原因,我让A持续发送数据给B,结果仍然特别慢,我试着去排除他们两个的问题,我把电脑连到路由,用发送端A发给电脑,电脑端接收速度很快,排除了发送端的问题,结果用电脑又给接收端B每隔1ms发送数据,接收端也收的很快……不知道为什么用A去给B发就会出现速度特别慢的问题,附上代码(代码中是每发送10包断开重连继续发送),还请麻烦大家帮我分析一下原因,谢谢了!
while(1){// creating a TCP socket iSockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0); if( iSockID < 0 ) { ASSERT_ON_ERROR(SOCKET_CREATE_ERROR); } iStatus = sl_Connect(iSockID, ( SlSockAddr_t *)&sAddr, iAddrSize); if( iStatus < 0 ) {// errorsl_Close(iSockID);ASSERT_ON_ERROR(CONNECT_ERROR); } for(i=0;i<10;i++) { // sending packetg_cBsdBuf[BUF_SIZE-6]=(char)lLoopCount>>24;g_cBsdBuf[BUF_SIZE-5]=(char)lLoopCount>>16;g_cBsdBuf[BUF_SIZE-4]=(char)lLoopCount>>8;g_cBsdBuf[BUF_SIZE-3]=(char)lLoopCount; iStatus = sl_Send(iSockID, g_cBsdBuf, 262, 0 ); if( iStatus < 0 ) { // error sl_Close(iSockID); ASSERT_ON_ERROR(SEND_ERROR); }lLoopCount++; } sl_Close(iSockID); MAP_UtilsDelay(8000000);}
以上是发送端;
int Ret,lLoopCount;int socketID[4] = {-1, -1, -1, -1};for(i = 0; i < 4; i ++){if(socketID[i] < 0){socketID[i] = sl_Accept(serverID, ( struct SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize);}if(socketID[i] > 0){int LOOP;UART_PRINT("\n\rReceiving:\n\r");for(LOOP = 0;LOOP < 1024 ; LOOP++){Ret = sl_Recv(socketID[i], g_cBsdBuf, 1000, 0);for ( lLoopCount = 0;lLoopCount < Ret;lLoopCount++){MAP_UARTCharPut(UARTA0_BASE,g_cBsdBuf[lLoopCount]);}memset(g_cBsdBuf,0,sizeof(g_cBsdBuf));}}}for(i = 0; i < 4; i ++){sl_Close(socketID[i]);socketID[i]= -1;}
以上是接收端。
Terry Han:
每发送10包断开重连继续发送—–快速发送可以不用断开,直接向目的地址的IP+端口号发送数据即可
苜蓿草:
回复 Terry Han:
我试过不断开,速度仍然特别特别慢
苜蓿草:
经过检查,发现是发送端速度太快没有进行限制,接收端用uart输出速度太慢造成数据堆挤,将发送端速度降低便可。
Terry Han:
回复 苜蓿草:
UART可采用FIFO+DMA的方式提高使用效率,提高数据的传输效率