2014-10-31 27 views
-1

我正在编程一个嵌入式模块通过GPRS连接通过FTP发送文件。FTP上传文件大小0bytes通过GPRS

这些文件有时可以正常上传,但同样经常我得到的文件不包含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); 
} 
+1

你没有给我们任何信息来帮助我们诊断你的问题。没有相关的代码,没有描述系统... – Ross 2014-10-31 18:01:08

+0

无线传输错误可能是由于多种原因造成的。有关您的设置和应用程序/软件体系结构的说明可以帮助解决问题。 – 2014-10-31 18:39:29

+0

听起来像你需要修改服务器以保存部分结果,或者更好地更改机制。尝试使用更简单的方法,而不是FTP,只需记录每个数据块的大小即可。有一个好的重试确认和重试机制,以便尽快重新建立连接。 – 2014-10-31 19:00:27

回答

1

发现问题,内置函数塞拉利昂无线“wip_close(data_channel)”没有被正确关闭线标准。

该软件将通过在FTP服务器上放置一个命名文件开始 - 0字节。

数据包似乎发送成功。

当逼抢使用FTP,你必须确保连接正确关闭,否则会出现所有的数据包将被丢弃的数据通道。

0字节仅仅是因为在传输数据包之前文件被放置在那里。

对于希望更详细其他山脉无线用户,见下文:

原始编码:

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.代码被修改为最小化,而不是字符与演示相同,但​​足以在此进行必要的修改。