Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при работе с WinInet 
:(
    Опции темы
opiume
Дата 2.5.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Здравствуйте. У меня возникла следующая проблема.
Я использую Visual C++ 9.0.

Код:
Код
 
#include "stdafx.h"
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet")
 
#include <stdlib.h>
#include <fstream>
#include <iostream>
using namespace std;
void zapis(HINTERNET hConnect1,WIN32_FIND_DATA struktura)
{
    TCHAR filenames[270]=TEXT("C:\\123\\");
    for(int i=0;i<256;i++)
    {
        filenames[i+7]=struktura.cFileName[i];
    }
      if(FtpGetFile(hConnect1,struktura.cFileName,filenames,0,0,0,0))
       {
           cout<<"File Downloaded"<<std::endl;
            
       }
       else  
       {
           cout<<"File  Error"<<std::endl;
       }
}
int _tmain(int argc, _TCHAR* argv[])
{
    bool ok = false;
    HINTERNET hInternet=::InternetOpen(TEXT("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)"),
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,NULL,
            0);
if (hInternet != NULL)  
{
        // открываем FTP сессию
    DWORD_PTR asd=0;    
    HINTERNET hConnect =  
            ::InternetConnect(
                hInternet,
                TEXT("192.168.131.134"),
                INTERNET_DEFAULT_FTP_PORT,
                NULL,NULL,
                INTERNET_SERVICE_FTP,
                0,
                (DWORD)0);
 
        if (hConnect != NULL)
             {
               cout<<"yes"<<std::endl;
               WIN32_FIND_DATA sss;
               WIN32_FIND_DATA aaa;
               LPTSTR buffer111=TEXT("/ftproot");
                
               if(FtpSetCurrentDirectory(hConnect,buffer111))
               {
                   HINTERNET FileFTP;
                   FileFTP=FtpFindFirstFile(hConnect,TEXT("*.bin"),&sss,INTERNET_FLAG_NEED_FILE,0);                    
               if(FileFTP!=NULL)
               {
                   cout<<"New files are on server"<<std::endl;
                    
                   BOOL Uslovie=TRUE;
                   while(Uslovie)
                   {
                       zapis(hConnect,sss);
                       if(InternetFindNextFile(FileFTP,&sss)==TRUE) Uslovie=TRUE;
                       else Uslovie=FALSE;
                   }
                    
                       cout<<"File  END"<<std::endl;
                        
                    
 
               }
               else  
               {
                    
                   cout<<"NO"<<std::endl;
                   DWORD WINAPI asdf=GetLastError();
                   cout<<asdf;
               }
             
               }
               else cout<<"no";
        }
        else  
        {
            cout<<"no";
            
        }
        
            // закрываем сессию
            ::InternetCloseHandle(hConnect);
        }
        // закрываем WinInet
        ::InternetCloseHandle(hInternet);
     
 
   
 
    return 0;
}

 
Дело в том, что в начале программа работает в целом нормально. Т.е. при
скачивании первых 10 или 13 файлов с сервера. Файлы скачиваются в
нужную мне папку с нужным именем. Но затем, при скачивании 11 или 14
файла программа может или зависнуть или отправить всю систему в
перезагрузку. При установки точки останова на строке
Код

if(FtpGetFile(hConnect1,struktura.cFileName,filenames,0,0,0,0))

Оказалось,
что все параметры передаваемые в функцию, верные (т.е. именно те
значения, которые и должны быть). (Мне кажется, что некорректное
поведение программы вызвано именно этой строкой, т.к. это последняя
фукция, которая вызывается перед зависанием или перезагрузкой). Более
того, по записям логов сервера оказалось, что при запросе последнего
файла (того, на котором происходит сбой) корректно происходит запрос
размера этого файла и начинается его скачка, но успешно она не
заканчивается, т.к. система или перезагружается, или сервер разрывает
соединение по завершению тайм-аута.
 
В случае, когда происходит
перезагрузка данный файл вообще не записывается на диск. А если
программа "виснет", то файл на диск все же записывается, но не весь, а
только первые 4 Кb. При этом открыть файл при запущенной программе
невозможно, т.к. он уже открыт в монопольном режиме моей программой,
т.е. похоже, что она пытается записать в него информацию.
 
Я не могу понять в чем причина некорректной работы прграммы.
Если кто-нибудь может подсказать чем вызваны такие ошибки, прошу помочь. 


PM MAIL   Вверх
opiume
Дата 3.5.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



С проблемой разобрался. Оказалось, что ошибки в работе возникают только в том случае, если сервер локальный.
Кстати, никто не знает почему так?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.