Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 14:09   #1
SergXP
 
Регистрация: 02.03.2009
Сообщений: 5
Вопрос мнопоточная проверка тиц доменов

Добрый день!

Нужна Ваша помощь, не могу понять как исправить проблему...

В общем, пишу для себя программку проверки тиц доменов.
Доменов много, поэтому без потоков не обойтись.

Код:
{функция ограничивающая время ожидания ответа при http запросе}
function recvdata(sock:TSocket):string;
var
   tv : timeval;
   fds : TFDSet;
   buf : array [1..MAX_BUF_LEN] of char;
   res : string;
   r,i : integer;
begin
   r:=1;
   while (r>0) do
   begin
      FD_ZERO(fds);
      FD_SET(sock, fds);
      tv.tv_sec := REPLY_TIMEOUT div 1000;
      tv.tv_usec := (REPLY_TIMEOUT mod 1000) * 1000;
      i := select(0, @fds, nil, nil, @tv);
      if (i <= 0) then  break;
      r := recv(sock, buf, 20000, 0);
      res:=res+copy(buf,1,r);
   end;
   result:=res;
end;
//--------------------------------------//
{выполнение потока}
procedure TMyThread.Execute;
var
   s:TSOCKET;
   addr:sockaddr_in;
   {строка содержащая тело http запроса}
   sendbuff,
   {строка, в которую читаем домены из StringGrid}
   str,
   {строка, содержащая ответ на наш http хапрос от сервера}
   reply:string;
   TIC,ll:integer;
begin

{увеличиваем счетчик незавершенных(активных) потоков на 1}
InterlockedIncrement(threads_alive);
{пока не закончится список выполняем код}

  while ((ss<=Form1.url_list.RowCount-1) and not terminated) do
  begin
  

     cs.Enter;
      str:=Form1.url_list.Cells[0,ss];
      inc(ss);
     cs.Leave;

     //создаем сокет
     s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     FillChar(addr, SizeOf(sockaddr_in), 0);
     addr.sin_family:=AF_Inet;
     addr.sin_port:=htons(80);
     addr.sin_addr.S_addr:=inet_addr(PChar('213.180.204.75'));
     //коннектимся
     Connect(S,addr,SizeOf(TSockAddr));

     sendbuff := 'GET http://bar-navig.yandex.ru/u?ver=2&show=32&url=' + str;
     sendbuff := sendbuff + ' HTTP/1.0'#13#10#13#10;

     // Записываю текст запроса в мемо
     Form1.Memo1.Lines.Add(sendbuff);
     //шлем запрос
     send(s, sendbuff[1] , Length(sendbuff), 0);
     //считываем ответ
     reply:=recvdata(s);
     //закрываем сокет
     closesocket(s);
     //Записываю ответ в мемо2
     Form1.Memo2.Lines.Add(reply);

     //Обрабатываем запрос
     TIC := Pos('value="', reply);

     if TIC<>0 then
     begin
        cs2.Enter;
          Delete(reply, 1, TIC + 6);
          TIC := Pos('"', reply);
          Form1.url_list.Cells[1,ss] := Copy(reply, 1, TIC - 1);
        cs2.Leave;
     end;


  end; 
{уменьшаем счетчик незавершенных(активных) потоков на 1}

InterlockedDecrement(threads_alive);
end;
Не понимаю, почему не работает.
По идеи, должны открыться 10 портов, и в каждом порту идет проверка доменов... но на практике все путается, и не работает.
Единственное что спасает, это добавить команду sleep() в
Код:
cs.Enter;
      str:=Form1.url_list.Cells[0,ss];
      inc(ss);
      Sleep(500);
     cs.Leave;
Но тогда очень долго работает

Хотел чтобы программа работала, наподобие брута, т.е. ставлю кол-во потоков 100 и быстро происходит проверка...

Делаю по данному рабочему примеру:
http://forum.antichat.ru/showpost.ph...5&postcount=15

Помогите пожалуйста, в чем моя ошибка
SergXP вне форума Ответить с цитированием
Старый 09.12.2009, 23:36   #2
SergXP
 
Регистрация: 02.03.2009
Сообщений: 5
По умолчанию

мда, так никто и не помог
Разобрался сам, работает.
SergXP вне форума Ответить с цитированием
Старый 28.12.2009, 18:42   #3
JakSon
Пользователь
 
Регистрация: 16.02.2008
Сообщений: 22
По умолчанию

раз разобрался скажи в чем была проблема!! или сам код выложи...
JakSon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чекалка доменов .BY zh01 Фриланс 5 07.07.2009 13:00
Whois в indy 9 для .ru доменов Alar Работа с сетью в Delphi 3 11.06.2009 12:34
Как в ASP + JavaScript получить список доменов локальной сети Active Directory Torredo JavaScript, Ajax 1 10.06.2009 17:38
Как проверить ТиЦ и ПР сайта. Neset Работа с сетью в Delphi 3 27.02.2009 10:06