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

Неполучается загрузить капчу
  #1  
Старый 12.12.2009, 18:30
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию Неполучается загрузить капчу

Вот отрывок кода
Код:
....................................................................
	   rec=0;acum=0;
	   for(;;)
	   {
			rec=recv(s,Sr,1024*1024,0);
			Sr+=rec;
			acum=acum+rec;
			if(rec==0){Sr-=acum;break;}
	   }
	   closesocket(s);
	   alen=(strlen(Sr)-strlen(strstr(Sr,"\r\n\r\n")))+4;
	   Sr+=alen;//обрезка заголовка
	   Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
	   TJPEGImage * examp = new TJPEGImage;
	   TMemoryStream *stM = new TMemoryStream;
	   br=acum-alen;//размер картинки
	   memcpy(img,Sr,br);//картинка копируется в буффер
	   stM->Position=0;
	   stM->Write((const void*)img,br);//в поток
	   examp->LoadFromStream(stM);//а тут ошибка 42
	   Bitmap->Assign(examp);
	   PaintBox1->Canvas->Draw(59,59,Bitmap);
	   delete examp;
	   delete Bitmap;
	   delete stM;
	   Sr-=alen;
....................................................................
Conten-Length нету в content type image\jpeg
Скачаный и "очищенный" от заголовка файл начинается :
Цитата:
6c9
яШяа JFIF
Но всеравно компонента ругается 42й ошибкой =/


Путем метода тыка через сниффер оказалось что в моем коде размер картинки расчитывается на 12 байт больше чем показывает сниффер...Откудого они могут быть?И в какую часть файла попадают?

Последний раз редактировалось _nic; 12.12.2009 в 19:04..
 
Ответить с цитированием

  #2  
Старый 12.12.2009, 19:16
Аватар для sn0w
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

Код:
LPVOID Inet_GET(IN LPSTR host, IN LPSTR request, IN LPSTR referrer,OUT LPDWORD retlen, IN BOOL KeepConnection)
{
	LPCSTR szAccept[] = {"*/*", NULL};
	LPCSTR szUserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3";

	*retlen = 0;

	HINTERNET hInternet = InternetOpen(szUserAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL,0);
	
	DWORD flags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_PRAGMA_NOCACHE;
	if(KeepConnection) flags |= INTERNET_FLAG_KEEP_CONNECTION;
	HINTERNET hConnect = InternetConnect(hInternet, host, 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
	HINTERNET hRequest = HttpOpenRequest(hConnect, "GET", request, NULL, referrer, szAccept, flags, 0);

	HttpSendRequest(hRequest, 0, 0, NULL, 0);
	
	LPVOID	outbuff = halloc(4096);
	LPVOID	p = outbuff;

	DWORD size = 0, curr = 0;

	while(InternetReadFile(hRequest, p, 4096, &curr)==TRUE && curr !=0){
		size += curr;
		outbuff = hrealloc(outbuff, size + 4096);
		p = (LPVOID)((DWORD)outbuff+size);
	}

	InternetCloseHandle(hRequest);
	InternetCloseHandle(hConnect);
	InternetCloseHandle(hInternet);

	*retlen = size;
	return outbuff;
}
//////////////////////////////////////////////////////////////////////////
LPVOID Get_Image(char *url, DWORD *len, char *referrer)
{
	return Inet_GET("pix01.devki.ws", url, referrer, len, 0);
}
__________________


snow white world wide
 
Ответить с цитированием

  #3  
Старый 12.12.2009, 19:21
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

У меня сокеты...Хотелось бы понять где косяк.
 
Ответить с цитированием

  #4  
Старый 12.12.2009, 19:27
Аватар для sn0w
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

попробуй сканить до яШя (FF D8 FF) - просто смысла не втжу сокет юзать для этого. хотя смотря какое тз
__________________


snow white world wide
 
Ответить с цитированием

  #5  
Старый 12.12.2009, 19:28
Аватар для sn0w
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

у тяж указатель буфера нигде не декрементится, значит и получаешь то что есть, хотя борланд-борланд)

ааа хахах, вот в этом и задница в -= )

смотри с декрементом, тут твой косяк и лежит
__________________


snow white world wide

Последний раз редактировалось sn0w; 12.12.2009 в 19:30..
 
Ответить с цитированием

  #6  
Старый 12.12.2009, 19:42
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Насколько же ещё кроме заголовка нада буфер сдвинуть???
 
Ответить с цитированием

  #7  
Старый 12.12.2009, 20:09
Аватар для sn0w
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

капча не может быть больше метра точно, поэтому получай рекв 1 раз а не в цикле, далее сканируй буфер (бинарно а не стрстрами) до появления последовательности яШя и будет тебе радость и минус куча кода
__________________


snow white world wide
 
Ответить с цитированием

  #8  
Старый 12.12.2009, 20:13
Аватар для __mad
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме:
548128

Репутация: 104
По умолчанию

Код:
6c9
яШяа JFIF
Когда заголовок не указан, то размер данных передается сразу вначале блока данных, то есть 6c9 (в хексе) в твоем случае и есть размер картинки, а после этого числа и переноса строки идут сами данные.
 
Ответить с цитированием

  #9  
Старый 12.12.2009, 20:34
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Гм а чем заменить atoi для hex числа?
 
Ответить с цитированием

  #10  
Старый 12.12.2009, 20:44
Аватар для sn0w
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

аналогично

//add
unsigned int mystrlen(char *sstring)
{
char *start = sstring;
while(*sstring++)
;
return (unsigned int)(sstring-start-1);
}

unsigned int BinToDec(char *sStr)
{

// 1 0 1 0 1 1 0 0 (BIN)
// 7 6 5 4 3 2 1 0 (offset)

unsigned int total = 0;
int nOff = 0;
for(int i = mystrlen(sStr)-1; i >= 0; i--){
if(sStr[i]=='1'){
total += pow(2, nOff)*1;
} // иначе домнаживаем на ноль
nOff++;
}
return total;
}

а каком формате то, приведи пример строки с хекс числом
__________________


snow white world wide

Последний раз редактировалось sn0w; 12.12.2009 в 20:53..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прямая ссылка на капчу PHP-форума alex.k12 PHP, PERL, MySQL, JavaScript 11 03.05.2009 23:23
DLE 7.5 - Капчу не показывает mailbrush Сценарии/CMF/СMS 1 31.03.2009 22:05
Assembler FAQ GlobalRave С/С++, C#, Delphi, .NET, Asm 2 15.02.2009 18:59
Помогите прирутить капчу poka_nub PHP, PERL, MySQL, JavaScript 0 02.12.2008 00:56



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


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




ANTICHAT.XYZ