![]() |
Многопоточный чеккер прокси под VK своими руками. Delphi
потребовалось, потому постарался по возможности создать "fine example of source code"
Уверен новичкам пригодится. Требуется: кинуть на форму Button1, Edit1, Label1 создать событие Form1.OnCreate затем полностью заменить данным кодом код модуля Unit1. ;) Код:
unit Unit1;В файл good.txt пишутся хорошие прокси. Пример может быть легко "переоборудован" практически в любую другую многопоточную программу по отсылке\приему\обработке http запросов. Если вы покажете изменения, которые, будучи внесены сделают его _реально_ более эффективным - велкам. |
в этом посте будет содержаться тот же самый код, только для консольной версии.
|
1. для класса лучше создавать отдельный модуль
2. есть WSAStartup а где WsaCleanUp? 3. дожидаться завершения потоков с помощью sleep в корне не верно. Статик поле - счетчик живых потоков. Либо пробегаться по массиву и проверять свойство Alive (я в дельфи не помню, в .NET'e это IsAlive) 4. for counter_1:=0 to threads-1 do MyThread[counter_1] := TMyThread.Create( True ); for counter_1:=0 to threads-1 do MyThread[counter_1].FreeOnTerminate := True; for counter_1:=0 to threads-1 do MyThread[counter_1].Priority := tpLower; эмм... а не проще ли создать объект, изменить свойства и добавить в массив? или сделать это в конструкторе? это навскидку, не углублялся. То что сразу бросилось в глаза |
сорцы хоть скинь, полные
|
AquaKlaster
сорцы полные. Программа состоит всего из 1 - этого - модуля. W!z@rD для наглядности 1-им модулем - лучше. WsaCleanUp - добавил, сделал вызов стартапа и клинапа в программе всего по 1 разу Конструктор - добавил счетчик живых потоков - добавил Буду рад комментам по увеличению эффкетивности (если такое возможно). |
>>Конструктор.. не проще, но прикольнее.
O_o WsaStartup/WsaCleanUp не дергай каждый раз, в каждом потоке. Startup перед запуском потока, CleanUp при завершении последнего потока. Смотри конструкторы/деструкторы http://www.rsdn.ru/forum/delphi/2927396.flat.aspx - рассматривается вопрос о том как определить работает поток или нет:? P.S. я на канале, помогу если не занят буду |
W!z@rD - спс за замечания)
ты прав, с конструктором веселее. И с WsaStartup тоже поправил уже, пока редактировал. Теперь вызываю его всего 1 раз, и 1 раз клин-ап. Сейчас встрою контроль по счетчику живых потоков и будет вообще красота >< |
не используй так называемые магические цифры...
"20000" константу делай из этого. MAX_BUF_LEN 'GET /index.php HTTP/1.1'+ #13#10 + 'Host: vkontakte.ru'+ #13#10#13#10; аналогично 'GET /index.php HTTP/1.1'#13#10'Host: vkontakte.ru'#13#10#13#10; не проще ли передавать прокси и учетку в поток? 1 поток - 1 проверка addr.sin_family:=AF_Inet; addr.sin_port:=htons(strtoint(port)); addr.sin_addr.S_addr:=inet_addr(PChar(ip)); with? (мне не хватает этого в дотнете) cs2.Enter; append(good); writeln(good,ip+':'+port); closefile(good); cs2.Leave; ппц, не пиши так =) закрытие файлов и освобождение ресурсов делай в блоке try...finally, там же можно сделать обработку исключений. "Set-Cookie", а "set-cookie" прийти не может? мб есть смысл переводить все в нижний регистр? форма будет висеть до тех пор пока не кончатся прокси? |
Цитата:
|
константу объявил, пусть будет - все удобнее.
'GET /index.php HTTP/1.1'+ #13#10 + 'Host: vkontakte.ru'+ #13#10#13#10; так и задумано. Если у юзера в запросе не 2 а 7,8 или даже 10 строк - очень удобно писать именно в таком формате. Цитата:
with : +3^4символьных слова в данном случае смотрятся лучше, чем +5 слов, образующие 3 дополнительные строки. Хотя вообще, согласен, удобная вещь. открытие\закрытие файлов и освобождение крит-секций в try...finally добавил. Обработку ошибок на connect (сразу говорю) считаю излишней, т.к. в случае, если коннекта нет, то никаких действий не просиходит и никаких "нештатных" ситуаций тоже. Означает же это что либо проксик совсем мертвый, либо что у юзера нет инета. В первом случае все норм, во втором - проблемы индейцев шерифа не волнуют. На WsaStartup тоже обработку ошибок не делал - лишний код. Если WsaStartup успешно, то все будет работать, а если нет, то юзер и сам догадается, что пора поставить XP вместо win-95 Set-Cookie - там приходит именно так. В нижнем регистре не приходит. Да и не суть важно за какую фразу "цепляться", главное чтобы она была в 100% нужных ответов и в минимуме (>>0) ненужных. Форма будет висеть пока её не закроют крестиком :) Если юзер снова нажмет кнопку - надпись на ней снова сменится на "Proceccing..." и программа безбажно отработает цикл еще раз. При закрытии формы - закрывается файл proxy и освобождаются крит-секции. Если даже завершение пройдет некорректно, это все равно не страшно. Контроль за фактом завершения программы по количеству незавершенных потоков (равному 0) добавил. Теперь программа пишет Ready только после того, как завершатся все созданные ею потоки. |
| Время: 06:44 |