//$$---- Form CPP ----
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char ip[20] ;
for(int i = 1; i < 255; i++)
{
sprintf(ip,"%s%d","10.10.110.",i);
Label1->Caption = ip;
IdUDPServer1->SendBuffer(ip,27015,"яяяяinfostring\0",15);
::Sleep(5);
Application->ProcessMessages();
IdUDPServer1->SendBuffer(ip,27015,"яяяяTSource Engine Query\0",25);
::Sleep(5);
Application->ProcessMessages();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender, TStream *AData,
TIdSocketHandle *ABinding)
{
char buff[300];
for(int i=0;i < AData->Size ;i++)
{
AData->ReadBuffer(&buff,sizeof(buff));
if (buff == 0) {buff = '@';}
}
buff[AData->Size] = 0;
Memo1->Lines->Add(buff);
Memo1->Lines->Add(ABinding->PeerIP);
Memo1->Lines->Add(ABinding->PeerPort);
}
//---------------------------------------------------------------------------
Почему мой UDP сканер дико грузит комп?
При первом запуске этой проги и начале сканирования мой проц AMD 64 3700+
грузится процентов на 70, притом сам процесс моей проги грузит только на 30%
остальное - системные процессы!
При повторном запуске сканирования, без перезапуска проги, процесс проги
потребляет уже 0% и системные процессы фактически тоже 0%!
Это все относится к сканированию одного сегмента из 254 айпишников,
когда же таких сегментов много, штук 25 (если изменить цикл сканирования)
то при повторных сканирования процесс моей проги потребляет уже не 0%
а в среднем 5%.
Вот скрин загрузок проца при двух сканированиях 25 сегментов
http://img220.imageshack.us/my.php?image=661ea7.jpg
очевидно что второе сканирование ещё и меньше времени занимает!
Эта прога написанна на Borland Developer Studio 2006 -> C++Builder
но у меня есть уже готовый релиз написанный на сокетах на C++ Builder 6
и там почти тоже самое наблюдается!
Кроме того если запустить прогу прям из BDS2006 то переодически вылазят
во время сканирования вылазят такие ошибки:
First chance exception at $7C81EB33. Exception class EIdSocketError with message 'Socket Error # 10054
Connection reset by peer.'. Process Project1.exe (3476)
Насчёт проги написанной на билдере 6 и не сокетах, я точно непомню, были там такие
ошибки или нет.
Отчего такое происходит?!! И как с этим бороться?
Например выделенный сервак 3D шутера работая с 32 клиентами в обе
стороны посылая по 100 пакетов в секунду каждому (и не 20 байт!)
грузит такой проц меньше 70%, а ведь пересылка пакетов это не самая главная
его задача!!!
Код:
"ForceWare Intelligent Application Manager (IAM)"
и фтп сервер Serv-U когда вырубаеш тока Serv-U загрузка проца
становится процентов 30 если вырубить тока службу 10..20%
Вобщем заменил я Serv-U на WarFtpd а службу вообще выключил
и всё стало нормально - загрузка проца 0%.
Какое взаимодействие может быть между Serv-U и прогой рассылающей
одинаковые UDP пакеты по разным адресам?!!