![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сканирование портов [D5, WinXP]
Rezya © (2004-03-09 20:42:00)Люди добрые подскажите PLZZZZ....
Написал сканер портов на основе winsock. Он работает но крайне медленно в отличии тех сканеров что я скачал с I-Net. Чем это обусловлено и как ускорить скорость работы.
Приведу код чтобы было понятно
procedure WWW.Execute;
Var
Data:WsaData;
Sock:TSocket;
Addr:sockaddr_in;
begin
if (WSAStartup($202,Data) <> 0)then Synchronize(WSAStartup1);
Sock:=Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Sock=INVALID_SOCKET) then Synchronize(INVALID_SOCKET1);
Addr.sin_family:=AF_INET;
Addr.sin_addr.S_addr:=inet_Addr(PChar(IpAdress));
For K:=StartPort to EndPort do
begin
Addr.sin_port:=htons(k);
Synchronize(Count);
if Connect(Sock,Addr,Sizeof(Addr))<>0 then
begin
//Synchronize(Error);
end
else
begin
Synchronize(Good);
end;
end;
end;
Делал Отдельным процессом дабы не загружать прогу.
Если кто чем поможет заранее Благодарен.
Verg (2004-03-09 20:58:00) [1]Дело в том, что ты не используешь не только возможностей многопоточности, но и мощности самого WinSock. Ты применяешь последовательную схему, т.е. пока попытка соединения с одним портом не закончится, к следующему ты не приступаешь.
Хотя можно было бы использовать неблокирующие сокеты с мультиплексированием, например.
Вот почитай пока.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1078117651&n=4