FTP通过GPRS上传文件大小为0bytes

时间:2014-10-31 17:11:27

标签: c ftp embedded gprs

我正在编程嵌入式模块,通过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);
}

1 个答案:

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