Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Неполучается загрузить капчу |

12.12.2009, 18:30
|
|
Постоянный
Регистрация: 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
Скачаный и "очищенный" от заголовка файл начинается :
Но всеравно компонента ругается 42й ошибкой =/
Путем метода тыка через сниффер оказалось что в моем коде размер картинки расчитывается на 12 байт больше чем показывает сниффер...Откудого они могут быть?И в какую часть файла попадают?
Последний раз редактировалось _nic; 12.12.2009 в 19:04..
|
|
|

12.12.2009, 19:16
|
|
Статус пользователя:
Регистрация: 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
|
|
|

12.12.2009, 19:21
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
У меня сокеты...Хотелось бы понять где косяк.
|
|
|

12.12.2009, 19:27
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
попробуй сканить до яШя (FF D8 FF) - просто смысла не втжу сокет юзать для этого. хотя смотря какое тз
__________________
 
snow white world wide
|
|
|

12.12.2009, 19:28
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
у тяж указатель буфера нигде не декрементится, значит и получаешь то что есть, хотя борланд-борланд)
ааа хахах, вот в этом и задница в -= )
смотри с декрементом, тут твой косяк и лежит
__________________
 
snow white world wide
Последний раз редактировалось sn0w; 12.12.2009 в 19:30..
|
|
|

12.12.2009, 19:42
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Насколько же ещё кроме заголовка нада буфер сдвинуть???
|
|
|

12.12.2009, 20:09
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
капча не может быть больше метра точно, поэтому получай рекв 1 раз а не в цикле, далее сканируй буфер (бинарно а не стрстрами) до появления последовательности яШя и будет тебе радость и минус куча кода
__________________
 
snow white world wide
|
|
|

12.12.2009, 20:13
|
|
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме: 548128
Репутация:
104
|
|
Когда заголовок не указан, то размер данных передается сразу вначале блока данных, то есть 6c9 (в хексе) в твоем случае и есть размер картинки, а после этого числа и переноса строки идут сами данные.
|
|
|

12.12.2009, 20:34
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Гм а чем заменить atoi для hex числа?
|
|
|

12.12.2009, 20:44
|
|
Статус пользователя:
Регистрация: 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)
|
|
|
|