关于CC3200 文件下载问题
TI 工程师,你们好!
1、cc3200-sdk\example\file_download例程中的40K大小的文件下载,HTTP回应的信息里包含有Transfer-Encoding字段,可以成功下载文件;
2、修改HTTP请求字段,下载局域网内服务器上4MByte的MP3文件,原TI file_download 例程测试出 现错误,不能下载,原因是HTTP回应的信息里HTTP_CONTENT_LENGTH不等于0,是正文的大小;
// check if content length is transfered with headers
pBuff = (unsigned char *)strstr((const char *)g_buff, HTTP_CONTENT_LENGTH);
if(pBuff != 0)
{
// not supported
ASSERT_ON_ERROR(FORMAT_NOT_SUPPORTED);//程序报出FORMAT_NOT_SUPPORTED错误
}
3、修改HTTP消息请求
#define PREFIX_BUFFER "GET /assets/uploads/topic/131/audio/1.mp3"
#define POST_BUFFER " HTTP/1.1\n\rHost: 192.168.0.123\n\r
Accept: application/xjpg,audio/mp3, text/html, application/xhtml+xml,*/*\r\n\r\n"
#define HOST_NAME "192.168.0.123"
4、修改代码,用CONTENT_LENGTH后文件大小来控制接收,文件可以正确无误的接收,但接收
文件的速度很慢,需要2分钟左右才可以接收完成(备注:WIFI环境良好),同样的地方同样的文件,用手机下载,仅需要3~5秒就可以完成。
根据CC3200规格书描述,WIFI的吞吐量最大可到11MBbps, 文件的下载不应该这么慢,不知我那里没有注意到或者代码还没有修改好,请TI工程师给一些建议,谢谢!
把创建文件的大小改大点
TI员工,你们好!
非常感谢你们的回复,但为了测试大文件下载速度,我在整个文件下载过程中,并没有存文件操作,仅仅只是接收文件,统计下载的字节数,代码如下:
UART_PRINT("Response headers have Content-Length.\r\n");
data_length=Get_Content_Length(g_buff);
isChunked=0;
//开始处理数据
// "\r\n\r\n" marks the end of headers
pBuff = (unsigned char *)strstr((const char *)g_buff, HTTP_END_OF_HEADER);
if(pBuff == 0)
{
ASSERT_ON_ERROR(INVALID_SERVER_RESPONSE);
}
// Increment by 4 to skip "\r\n\r\n"
pBuff += 4;//指针地址移动到消息实体的头地址
// Adjust buffer data length for header size
transfer_len =transfer_len- (pBuff - g_buff);//获取HTTP响应消息中正文的字节数
if(data_length<=transfer_len)//如果文件字节数已经全部包含在HTTP响应消息中,不处理
{
for(i=0;i<data_length;i++)
{
UART_PRINT("0x%x ",*(pBuff+i));
}
}
else //data_length>transfer_len,文件比较大,需要多次传输
{
while(bytesReceived<data_length)
{
bytesReceived +=transfer_len;
memset(g_buff, 0, sizeof(g_buff));
transfer_len = sl_Recv(g_iSockID, &g_buff[0],MAX_BUFF_SIZE , 0);
pBuff = g_buff;
}
UART_PRINT("Downloading File Completed,FILE is %d bytes.\n\r",bytesReceived);
}
后续,还做如下实验:
1、检测AP接入点设置,下载速度没有带宽限制
2、查询局域网服务器的LOG,服务器发送数据到CC3200的字节数正确,time-taken:3227ms,也就是说,整个处理过程,
花费时间是3秒多,和用其它设备测试的结果差不多。
3、请问对于大文件下载,TI有相关参考代码吗?或者TI下载大文件的速率最快可以达到多少?是不是CC3200设计本身就不针对大文件下载应用这个市场定位?备注:我硬件用的是TI官方的DEMO板。
很希望能获得你们的回复!