На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Сканер портов , Пишем сканер портов
    Написал простой сканер портов с использованием сокетов. У меня возник вопрос : как реализовать многопоточность ? Заранее спасибо за ответ.
      IMHO лучше использовать не несколько потоков, а несколько неблокирующих сокетов.
        QUOTE (rcz @ 7.11.03, 16:37)
        IMHO лучше использовать не несколько потоков, а несколько неблокирующих сокетов.

        А можно по-подробнее ? Что ты имеешь ввиду под небл. сокетом ? Асинхронный и синхронный методы работы ?
        Сообщение отредактировано: Clane -
          Неблокирующий - асинхронный.
          Delphi не знаю, но на С это пиримерно так (WinAPI).

          Для простейшего сканирование коннектами.
          CODE

          WSAEVENT evts[N];
          SOCKET s[N];

          for(int i=0;i<N;i++){
                         s[i]=socket(AF_INET,SOCK_STREAM,0);
                         evts[i]=WSACreateEvent();
                         WSAEventSelect(s[i],evts[i],FD_CONNECT); //сканирование коннектами.
          );

          for(int i=0;i<N;i++){
                        connect(s[i],addr[i],sizeof(addr[i]);
          }

          while(!finish){
                         DWORD rtval=WSAWaitForMultipleEvents(N,evts,false,TIME_OUT,flase);
                         if(rtval==WSA_WAIT_TIMEOUT) /* никаких коннектов нет*/...
                         else{
                                int index=rtval-WSA_WAIT_EVENT_0;
                               //изменение адреса этого сокета. И новый запрос.
                               WSAResetEvent(evts[index]);
                               closesocket(s[index]);
                               s[index]=socket(AF_INET,SOCK_STREAM,0);
                               WSAEventSelect(s[index],evts[index],FD_CONNECT);
                               connect(s[i],newaddr,sizeof(newaddr));//берем новый адрес
          }

          }

          for(int i=0;i<N;i++)WSACloseEvent(evts[i]);

          Для других способов сканирования можно использовать WSAOVERLAPPED.
          З.Ы. код не тестировал.
          Сообщение отредактировано: rcz -
            QUOTE (Clane @ 7.11.03, 19:28)
            Написал простой сканер портов с использованием сокетов. У меня возник вопрос : как реализовать многопоточность ? Заранее спасибо за ответ.

            Для многоточности там есть Обьект Thread, добовляй его в программу, у него есть свойства
            типа создать поток закрыть.
            щас не поню точно, найду вобщем линку где я это взял скажу !
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,1812 ]   [ 17 queries used ]   [ Generated: 26.04.24, 20:30 GMT ]