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

06.05.2010, 01:59
|
|
Участник форума
Регистрация: 02.02.2010
Сообщений: 107
Провел на форуме: 612028
Репутация:
28
|
|
нафига копируешь в цикле?
есть ведь длина полученных данных, юзай copy
|
|
|

06.05.2010, 02:17
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Вот код полностью рабочий код, который я переработал из твоего. Посмотри, что к чему.
Код:
function LookupName(str: string): TInAddr;
var
_hostEnt:PHostEnt;
_inAddr:TInAddr;
begin
if (str[1] in ['a'..'z']) or
(str[2] in ['a'..'z']) then
begin
_hostEnt := getHostByName(pchar(str));
FillChar(_inAddr, sizeOf(_inAddr), 0);
if _hostEnt<>nil then
begin
with _hostEnt^, _inAddr do
begin
s_un_b.s_b1 := h_addr^[0];
s_un_b.s_b2 := h_addr^[1];
s_un_b.s_b3 := h_addr^[2];
s_un_b.s_b4 := h_addr^[3];
end;
end;
end
else
_inAddr.s_addr := inet_addr(pchar(str));
Result:= _inAddr;
end;
function SendRequest(URL,PACKET:string):string;
var
buf : array[1..1500] of char;
wData : WSADATA;
addr : sockaddr_in;
sock : integer;
error : integer;
phe : PHostEnt;
len,i,d : Integer;
begin
Result := '';
WSAStartup($0101, wData);
phe := gethostbyname(PChar(url));
sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
addr.sin_addr := LookupName(URL);
error := connect(sock, addr, sizeof(addr));
len := 0;
send(sock, PACKET[1], Length(PACKET),0);
repeat
FillChar(buf,SizeOf(buf),0);
d:=recv(sock,buf,SizeOf(buf),0);
len:=len+d;
for i:=1 to d do result := result + buf[i];
until d<=0;
closesocket(Sock);
WSACleanup;
end;
function Get(const AURL: string): string;
var
req : string;
tmp, tmp2 : string;
begin
tmp := AURL;
if pos('http://', tmp) = 1 then
Delete(tmp, 1, 7);
if pos('/', tmp) <> 0 then tmp2 := copy(tmp, pos('/', tmp), 255)
else tmp2 := '/';
req:='GET ' + tmp2 + ' HTTP/1.0' + #13#10 +
'Host: ' + tmp + #13#10+
'User-Agent: Opera/9.24 (Windows NT 5.1; U; en)' + #13#10 +
'Connection: close' + #13#10#13#10;
result := SendRequest(tmp, req);
end;
|
|
|

06.05.2010, 02:55
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
Последний раз редактировалось RedFern.89; 06.05.2010 в 03:03..
|
|
|

06.05.2010, 09:46
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 Chrome~ ошибочка у тебя есть небольшая )
Код:
repeat
FillChar(buf,SizeOf(buf),0); // зачем очищать буфер? Если всё равно ты знаешь размер полученных данных которыми забился буфер
d:=recv(sock,buf,SizeOf(buf),0); // тут у тебя D будет содержать размер данных или -1 при ошибке
len:=len+d; // а если была ошибка и d =-1 то ты от уже считанных данных откусишь 1 байт.
for i:=1 to d do result := result + buf[i]; // зачем?? если можно сразу копировать через copy
until d<=0;
|
|
|

06.05.2010, 16:49
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
slesh, да не спорю, ты прав )
Но это не я писал этот код, его писал RedFern.89. Просто именно в этой части кода я не делал никаких изменений. Делал только в тех частях, которые влияют на то, что нам отсылает сервер. То есть немного изменил формирование самого GET запроса.
А на счет данной части кода: написано действительно неэффективно, без какой либо оптимизации.
RedFern.89, архив либо битый, либо пасс не подходит.
Попробуй сам внести изменения в свой код используя то, что я отписал выше.
|
|
|

07.05.2010, 09:36
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
я с циклом не могу разобраца никак
|
|
|

08.05.2010, 01:27
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
так кто поможет с циклом?
|
|
|

08.05.2010, 02:09
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
отрубил антивирь, и все прекрасно работает)))) хз в ччем дело..если я запрашиваю другими компонентами страницы, то все норм а так посему то грузит и не до конца... странности какието со всем этим... =\
|
|
|

08.05.2010, 03:28
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
и причем запрос get работатет только при запущенном http analyzer'е о________________О
|
|
|

09.05.2010, 15:43
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Скажи, с каким циклом у тебя проблемы, помогу.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|