我正在编程嵌入式模块,通过GPRS连接通过FTP发送文件。
文件有时上传得很好,但同样经常我得到的文件中没有包含0byte文件大小的数据。
我的猜测是导致它转储服务器端的所有数据,因为我正在获取显示所有数据发送的打印语句。
我正在使用C代码,目前正在使用最初由sierra wireless“FTP_PUT”提供的修改示例。这是结束阶段的简化示例:
dataWritten = wip_write(data_channel, bufferPtr + offset, buffSize - offset);
if(dataWritten != 0)
{
print("%d bytes sent in this packet",dataWritten); //appears to send everything
}
offset += dataWritten;
if(offset == bufferSize)
{
wip_close(data_channel);
}
答案 0 :(得分:1)
发现问题,sierra无线的标准内置功能“wip_close(data_channel)”没有正确关闭线路。
软件首先将命名文件放在FTP服务器上 - 0bytes。
数据包似乎发送成功。
关闭使用FTP的数据通道时,必须确保连接正确关闭,否则所有数据包都会被丢弃。
0字节只是因为在传输数据包之前将文件放在那里。
对于想要更多细节的其他sierra无线用户,请参阅以下内容:
原始代码:
handle_events_on_FTP_channel(){
case WIP_CEV_OPEN:
wip_putFile(control_channel,x,x,x)
break;
case WIP_CEV_PEER_CLOSE:
wip_close(data_channel);
data_channel = NULL;
wip_close(control_channel);
control_channel = NULL;
break;
}
修改后的代码:
handle_events_on_FTP_channel(){
case WIP_CEV_OPEN:
wip_putFile(control_channel,x,x,x)
break;
case WIP_CEV_PEER_CLOSE:
wip_close(data_channel);
data_channel = NULL;
wip_close(control_channel);
control_channel = NULL;
break;
case WIP_CEV_DONE:
wip_close(control_channel);
break;
}
原始代码:
handle_events_on_data_channel(){
case WIP_CEV_WRITE:
wip_write(data_channel,x,x)
if(ALL_DATA_TRANSMITTED){
wip_close(data_channel);
data_channel = NULL;
wip_close(control_channel);
control_channel = NULL;
}
break;
}
修改后的代码:
handle_events_on_data_channel(){
case WIP_CEV_WRITE:
wip_write(data_channel,x,x)
if(ALL_DATA_TRANSMITTED){
wip_shutdown(data_channel,FALSE,TRUE) //Channel, Input, Output
}
break;
case WIP_CEV_PEER_CLOSE:
wip_close(data_channel);
data_channel = NULL;
}
n.b。代码被修改为最小,而不是与演示相同的字符,但足以进行必要的修改。