Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Странно поведение при ftp прехвърляне
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=15753
Страница 1 от 1

Автор:  ig_ivanov [ Сря Фев 14, 2018 10:01 am ]
Заглавие:  Странно поведение при ftp прехвърляне

Имам програма, която трябва да прехвърля 4 различни файла през определено време към FTP сървър. Ето кода на частта с прехвърлянето:
Код:
bool Send2ftp(char mode)
{
   bool Result;
     HINTERNET hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
     HINTERNET hFtpSession = InternetConnect(hInternet, L"xxx.xxx.xxx.xxx", INTERNET_DEFAULT_FTP_PORT, L"User", L"Password", INTERNET_SERVICE_FTP, 0, 0);
   switch (mode)
   {
    case 1: {Result = FtpPutFile(hFtpSession, L"D:/file1.dat", L"/data/file1.dat",FTP_TRANSFER_TYPE_BINARY,0);break;}
    case 2: {Result = FtpPutFile(hFtpSession, L"D:/file2.dat", L"/data/file2.dat",FTP_TRANSFER_TYPE_BINARY,0);break;}
    case 3: {Result = FtpPutFile(hFtpSession, L"D:/file3.dat", L"/data/file3.dat",FTP_TRANSFER_TYPE_BINARY,0);break;}
    case 4: {Result = FtpPutFile(hFtpSession, L"D:/file4.dat", L"/data/file4.dat",FTP_TRANSFER_TYPE_BINARY,0);}
   }
  InternetCloseHandle(hFtpSession);
  InternetCloseHandle(hInternet);
return Result;
}

Файловете са от няколко десетки байта до около 6k, т.е. съвсем малки.
Кода си работи, ама не съвсем. През някакъв интервал от време (не съм установил зависимост) се получава така, че в FTP сървъра се е записала само част от файла (примерно малко повече от половината, или пък само десетина байта), а функцията е върнала, че всичко е наред. Пробвах и с PASSIVE_MODE- пак си прави магарията. Компютърът, който праща данни и сървъра са в една мрежа, връзката им е само през един суич, не минава през интернет. VC++ 2008 е средата. От какво може да се получава така?

Автор:  ДедоБоре [ Сря Фев 14, 2018 10:34 am ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

като начало пусни подходящи лог-левъли и на двете места, с които да виждаш име на файл и колко байта са прехвърлени. после ги сравни (големините)
сървъра да не е М$?

обърни внимание и дали файловете, които се пращат са флюшнати/затворени по време на самото предаване, т.е. дали са статични в този момент.

Автор:  ig_ivanov [ Сря Фев 14, 2018 10:44 am ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

Малко допълнение, което може да се окаже важно: Програмата се стартира от два лаптопа, като никога не се включва едновременно и на двата. Единият е с ХР, с връзка през АР- при него нямам проблем с трансфера. Другият е с Windows 7, пак 32бита и връзката му е с кабел и именно при него са мизериите. Лог файла на FTPто казва след 20на сек, че връзката е затворена неочаквано.
ДедоБоре написа:
...обърни внимание и дали файловете, които се пращат са флюшнати/затворени по време на самото предаване, т.е. дали са статични в този момент.

Файловете се създават преди да бъдат изпратени, дали седмИцата не се мотае с окончателното им затваряне?

Автор:  ike [ Сря Фев 14, 2018 1:06 pm ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

Wireshark

Автор:  radolin [ Сря Фев 14, 2018 1:14 pm ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

ig_ivanov написа:
Файловете се създават преди да бъдат изпратени, дали седмИцата не се мотае с окончателното им затваряне?


Той ОС-ът няма да се мотае, но процесът, който ги създава, може и да не ги е затворил още, или да не е изпразнил буферите за писане. За да си сигурен, че са изпразнени буферите може да викаш fflush().

Добави отпечатването на дебъг информация в процеса, който праща. Да печата примерно колко е размерът на файла, преди да почне да изпраща.

Автор:  ike [ Сря Фев 14, 2018 2:19 pm ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

//оффтопик
Има грешка в кода на редове 1 и 3. Създава променливи 4 пъти по-малки от колкото му трябват.

Автор:  goose [ Чет Фев 15, 2018 8:22 am ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

Minimum supported client: Windows 2000 Professional [desktop apps only]
Да не го рънваш някъде във фонов режим без джам отпред?
п.с. Отделно - хич не е добра практика да не проверяваш двата хендлъра дали не са null, мрежа е и всичко става, нямаш гаранция, че си направил connection ...

Автор:  ig_ivanov [ Чет Фев 15, 2018 10:23 am ]
Заглавие:  Re: Странно поведение при ftp прехвърляне

Проблема е решен. Пуснах си конзолен монитор на операциите и го намерих. Не е причината в кода. Срам, не срам- оказа се омазан драйвер на мрежовата карта. Когато се прояви проблема прехвърлените байтове умират на 1460. Файловете, които са с по-малка дължина са се прехвърляли нормално, само тези които са по-големи са се скапвали. Вече всичко работи нормално.
Благодаря за съдействието.

Страница 1 от 1 Часовете са според зоната UTC + 1 час [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/