2014-10-31 4 views
-1

Я программирую встроенный модуль для отправки файла через FTP через GPRS-соединение.Размер файла загрузки FTP 0bytes over GPRS

Файлы иногда загружаются нормально, но так же часто, как часто, я получаю файл, не содержащий данных с размером файла 0 байт.

Мое предположение было бы причиной того, что он сбрасывает все данные со стороны сервера, так как я получаю распечатывающие заявления, показывающие всю передачу данных.

Я использую код 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

+0

Ошибки беспроводной передачи могут быть вызваны множеством причин. Объяснение вашей архитектуры установки и приложения/программного обеспечения может помочь в устранении неполадок. –

+0

Похоже, вам нужно либо изменить сервер, чтобы сохранить частичные результаты, либо лучше изменить механизм. Вместо FTP попробуйте использовать что-то более простое и просто записать каждый кусок данных по мере его получения. Имейте хорошее подтверждение повторения и механизм повтора, чтобы как можно скорее восстановить соединение. –

ответ

1

Нашел проблему, стандартные встроенный в функции для сьерры беспроводного «wip_close (data_channel)» не выключая линии правильно.

Программное обеспечение должно начинаться с размещения именованного файла на FTP-сервере - 0 байтов.

Пакеты, казалось, отправлялись успешно.

При закрытии канала передачи данных, использующего 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. код изменен, чтобы быть минимальным, а не символом для символа, таким же, как демо, но здесь достаточно внести необходимые изменения.

Смежные вопросы