ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Delphi потоки вопрос по капчи
  #1  
Старый 13.03.2010, 06:06
Аватар для trigada
trigada
Banned
Регистрация: 23.09.2009
Сообщений: 5
Провел на форуме:
70690

Репутация: 0
По умолчанию Delphi потоки вопрос по капчи

Здраствуйте.
Такой вопрос:
Пытаюсь разобраться с написанием многопоточной программки, с помощью "Винсок". Потоки как бы сделал все норм. Мне нужно взять капчу и передавать ее на антигейт.ком, воспользовавшись
кодом который показал GlooK, в одной из тем, мне удалось вытащить капчу, но в том коде как бы капча вытаскиваеться в файл, насколько я понял, то так, как прога многопоточная, то не хорошо создавать файлы капчи для каждого потока, а потом удалять. Т.е. мне нужно капчу в память "пихать" и делать post запрос на антигейт, но я никак не могу понять, каким образом.
Вот код GlooKa чуть поправленный под мои требования:

Код:
function fWSRecv(wHost, wRequest, wPort: string ): integer;
var
hSocket: TSocket;
wsData: TWSAData;
hHost: PHostEnt;
hAddr: TSockAddrIn;
hTimeout: TTimeVal;
iRead: integer;
h : dword;
rb : dword;
hBuffer: array[0..MAX_BUF_LEN] of char;
NewFile: file;
begin
 WSAStartup($202, wsData);
 hSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 hHost := gethostbyname(PChar(wHost));
 hAddr.sin_family := AF_INET;
 hAddr.sin_port := htons(strtoint(wPort));
 hAddr.sin_addr := pinaddr(hHost^.h_addr^)^;
 hTimeout.tv_usec := 0;
 hTimeout.tv_sec := (REPLY_TIMEOUT mod 1000) * 1000;;
 setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval));
 connect(hSocket, hAddr, SizeOf(hAddr));
//Data := '';
 Send(hSocket, wRequest[1], length(wRequest), 0);
AssignFile(NewFile,'c:\capcha1.jpeg');
Rewrite(NewFile, 1);
 while (TRUE) do
 begin
  FillChar(hBuffer, SizeOf(hBuffer), 0);
  iRead := Recv(hSocket, hBuffer, length(hBuffer), 0);
     rb := pos(#13#10#13#10, String(hBuffer));
if rb > 0 then
rb := rb + 3 ;
  BlockWrite(NewFile, hBuffer[rb], iRead - rb);
  if (iRead <= 0) then break;
 end;
 CloseFile(NewFile);
 CloseSocket(hSocket);
 WSACleanup;
 result := 0;
end;
1.Как капчу в память Jpeg?
2.Насколька я понял, то эту функцию (function fWSRecv) не могут использовать несколько потоков одновременно?
Т.е. нужно использовать критические секции для исключения одновременного доступа к файлам( или памяти) из разных потоков. Или делать Массивную память, допустим у меня все равно больше 100 потоков не будет, и под каждый поток делать какойто цикл создания памяти Jpeg[i], где i это номер потока.

Мои мысли по поводу Jpeg:
Мне вместо этого
Код:
BlockWrite(NewFile, hBuffer[rb], iRead - rb);
надо вставить например

Код:
streamresponse:=TMemoryStream.Create;
while (TRUE) do
 begin
  FillChar(hBuffer, SizeOf(hBuffer), 0);
iRead := Recv(hSocket, hBuffer, length(hBuffer), 0);
     rb := pos(#13#10#13#10, String(hBuffer));
if rb > 0 then
rb := rb + 3 ;
      streamresponse.WriteBuffer(hBuffer[rb],iRead - rb);
       if (iRead <= 0) then break;
   end;
 streamresponse.Position:=0;
 JPEG:=TJPEGImage.Create;   //создаем jpeg
 JPEG.LoadFromStream(streamresponse);
   result:=JPEG;
  streamresponse.Clear;
   JPEG.Free;
3. И если можно в память картинку вставить, то как ее передать, так как на антигейт пост запрос такого вида :
Код:
multi:=Tidmultipartformdatastream.Create;
multi.AddFormField('method','post');
multi.AddFormField('key',apikey);
multi.AddFile('file',filename,ftype);
где filename- название файла?

Интересно насколько сложно распознавать капчу, с помощью нейронных сетей, мы как раз скоро в универебудем проходить, я понимаю что очень много зависит от самой картинки, например у моих капчей, белый фон или синий, а буквы черные или коричневые, буквы вплотную под разным искажением, но не пересекаються, т.е. вполне есть шансы распознать эту капчу через нейронные сети?

Сразу говорю Delphi тока начал учить, если что то не так не пинайте. Просто интересно было поработать с инди и посмотреть что это такое, а это только на дельфи. И в универе мы его не учим, учили С++, поэтому хочу посмотреть что за зверь такой делпфи.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Delphi Kandi С/С++, C#, Delphi, .NET, Asm 16 23.11.2009 10:06
Работа с RaveReport в Delphi (вопрос на засыпку) mr. ZetRikS С/С++, C#, Delphi, .NET, Asm 1 21.11.2009 21:07
вопрос: Delphi, изменить один и тот же параметр нескольких компонентов miqo С/С++, C#, Delphi, .NET, Asm 1 21.09.2009 07:00
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ