Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать




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

Код: Выделить весь код
// Инициализируем массив вне отдельного потока-----------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   lHash = new TStringList;

   lHash->Add("564dfacf47f4d215b76a5eb3770a83d4");
   lHash->Add("0045BCBD3047391E47F3B56DC7C7F2F2");
   lHash->Add("00636A27AF20104CC13E8DDE7DEE64E7");
   lHash->Add("012995DAD105ACEFBF05591271CD2F54");
}
//добавляем новую функцию. Здесь и будет обращение к серверу
DWORD WINAPI QueryThread(LPVOID lpParam)
{
   TStringList *post = new TStringList;
   TStringStream *response = new TStringStream("");
   TStringList *lHash = (TStringList *)lpParam;

   for(int i = 0; i < lHash->Count; i++){
      post->Clear();
      post->Add("chain=" + lHash->Strings[i]);
      try{
         Form1->HTTPQuery->Post("http://www.virustotal.com/search.html", post, response);
        }
      catch(EIdHTTPProtocolException &se){
         switch(se.ErrorCode){
            case 200: //всё ок
              break;
            case 303:
              break;  //редирект
            case 404: //404 not found
              break;
            default:
              break;
          }
       }
      catch(EIdSocketError &se){
         MessageBox(0, se.Message.c_str(), 0, 0);
        }
        Form1->HTTPQuery->Disconnect();
     }
    delete post, response, lHash;
}
// Выполнение и обработка-------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   bool connect = true; // Добавил переменную bool
   try{
     HTTPQuery->Get("http://www.virustotal.com/search.html");
     }
    catch(EIdHTTPProtocolException &se){
       switch(se.ErrorCode){
          case 200: //всё ок
            break;
          case 303:
            break;  //редирект
          case 404: //404 not found
            break;
          default:
            break;
         }
      }
    catch(EIdSocketError &se){
       //если не удалось подключится, то возникнет это исключение
       // и bool присваивается false
       if(se.LastError == 11001)
          connect = false;
      }
   if(connect){ // Если соединение есть - connect == true, начинаем обработку
      HANDLE hThread;

      hThread = CreateThread(0, 0, QueryThread, lHash, 0, 0);
      if(hThread == INVALID_HANDLE_VALUE){
         ShowMessage("Can't create thread");
         return;
        }
      CloseHandle(hThread);
     }
   else // Если соединения нету - connect == false
      MessageBox(0, "Не удалось подключится к удалённому серверу", 0, MB_OK + MB_ICONWARNING);
}
//---------------------------------------------------------------------------
Если где-то что-то я неправильно сделал, лишнее что-то и т.п., поправьте если сможете. Но всё работает.

Цитата ganselo:
if(se.LastError == 11004) »
А у меня ошибка 11001 при отсутствии соединения
Код: Выделить весь код
Socket Error # 11001 Host not found.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 15:33, 30-08-2010 | #49