
12.05.2010, 23:16
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
С нами:
9207335
Репутация:
21
|
|
Траблы с Winsock
procedure TForm1.Button1Click(Sender: TObject);
var
Form1: TForm1;
info: WSADATA;
sin: sockaddr_in;
myip: PHostEnt;
sHwnd: integer;
sBuff1:string;
sBuff, rBuff: array [0..5000] of char;
begin
WSAStartup(makeword(1,1),info);
sHwnd:=Socket(AF_INET, SOCK_STREAM, 0);
sin.sin_family:=AF_INET;
sin.sin_port:=htons(80);
sin.sin_addr.S_addr:=inet_addr('213.33.198.214');
connect(sHwnd, sin, sizeof(sin));
sbuff1:='GET / HTTP/1.1'+ #13#10 +
'Accept:application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/x-esobi, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+ #13#10 +
'Accept-Language:ru-RU'+ #13#10 +
'User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB6.4; MRA 5.6 (build 03278); SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16)'+ #13#10 +
'Accept-Encoding:gzip, deflate'+ #13#10 +
'Host  dnoklassniki.ru'+ #13#10 +
'Connection:Keep-Alive'+ #13#10+#13#10;
CopyMemory(@sBuff,pchar(sBuff1),length(sBuff1));
send(sHwnd, sBuff, Length(sBuff), 0);
recv(sHwnd, rBuff, Length(rBuff), 0);
Memo1.Lines.Add(rBuff);
end;
Что не так сделал??
Код взял тут на форуме.
В мемо добавляется пустая строка в результате.
Использую Delphi 10
|
|
|

12.05.2010, 23:19
|
|
Участник форума
Регистрация: 06.06.2008
Сообщений: 171
С нами:
9436571
Репутация:
110
|
|
проверяй для начала то, что возвращают функции
посмотри тут
|
|
|

12.05.2010, 23:22
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
С нами:
9207335
Репутация:
21
|
|
Сообщение от crystalbit
проверяй для начала то, что возвращают функции
посмотри тут
Я так делал, мурыжил долго.
Если делаю запрос к parsers.info в консоле возвращает знаки вопроса в 2 строчке. К другим сайтам вообще не че не возвращает и ошибку не где не выдает.
|
|
|

12.05.2010, 23:25
|
|
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
С нами:
8947056
Репутация:
229
|
|
Сообщение от denjf
Если делаю запрос к parsers.info в консоле возвращает знаки вопроса в 2 строчке
Попробуй убрать заголовки которые начинаются на "Accept"
|
|
|

12.05.2010, 23:28
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
С нами:
9207335
Репутация:
21
|
|
Сообщение от wolmer
Попробуй убрать заголовки которые начинаются на "Accept"
Эфект такой же. Может дело в Delphi 2010??
|
|
|

13.05.2010, 10:23
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
С нами:
9227388
Репутация:
180
|
|
sbuff1:='GET / HTTP/1.1'+ #13#10 +
'User-Agent:Mozilla/4.0'+ #13#10 +
'Host  dnoklassniki.ru'+ #13#10 +
'Connection:Keep-Alive'+ #13#10+#13#10;
так:
sbuff1:='GET / HTTP/1.1'+ #13#10 +
'User-Agent: Mozilla/4.0'+ #13#10 +
'Host: odnoklassniki.ru'+ #13#10 +
'Connection: Keep-Alive'+ #13#10+#13#10;
|
|
|

13.05.2010, 10:41
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
С нами:
9207335
Репутация:
21
|
|
Сообщение от M_script_
так:
Не работает!
|
|
|

13.05.2010, 10:44
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
снифер в руки и вперед за родину.
CopyMemory(@sBuff,pchar(sBuff1),length(sBuff1));
send(sHwnd, sBuff, Length(sBuff), 0);
recv(sHwnd, rBuff, Length(rBuff), 0);
это код полный пздц.
Отправляй данный сразу из строки, без промежуточного буфера.
А вот когда считываешь, то указывай не Length(rBuff) а размер буфера в байтах. или юзай sizeof
|
|
|

13.05.2010, 11:15
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
С нами:
9207335
Репутация:
21
|
|
Сообщение от slesh
снифер в руки и вперед за родину.
CopyMemory(@sBuff,pchar(sBuff1),length(sBuff1));
send(sHwnd, sBuff, Length(sBuff), 0);
recv(sHwnd, rBuff, Length(rBuff), 0);
это код полный пздц.
Отправляй данный сразу из строки, без промежуточного буфера.
А вот когда считываешь, то указывай не Length(rBuff) а размер буфера в байтах. или юзай sizeof
send(sHwnd, sBuff1[1], Length(sBuff), 0);
recv(sHwnd, rBuff, sizeof(rBuff), 0);
Memo1.Lines.Add(rBuff);
PS Только начал изучать винсок.
Вот что вернулось в ответ 訄
В Delphi 7 все работает!!! А в 2010 нихера (((
Последний раз редактировалось denjf; 13.05.2010 в 11:40..
|
|
|

13.05.2010, 11:36
|
|
Познающий
Регистрация: 04.03.2010
Сообщений: 32
С нами:
8520171
Репутация:
23
|
|
Сообщение от denjf
send(sHwnd, sBuff1[1], Length(sBuff), 0);
recv(sHwnd, rBuff, sizeof(rBuff), 0);
Memo1.Lines.Add(rBuff);
PS Только начал изучать винсок.
Вот что вернулось в ответ 訄
странно а должно было быть нарушение доступа
получится примерно так
movsx eax, byte ptr[buffer + 1]
push eax
//... передается не адрес а символ к тому же расширенный в итоге там нечто такого 0x000000df
а запись по такому адресу отловится скорее всего как запись в память отведенную для перехвата нулевых уакзателей а если символ был 0xff получится такой адрес 0xffffffff
напишите так
send(sHwnd, sBuff1, strlen(sBuff), 0);
sBuff1[1] это разыменование а нужен адрес и индексация с нуля не забываем
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Delphi Winsock 1.1 GET
|
Sams |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
9 |
05.03.2010 00:45 |
|
Траблы с Internet Connection :\
|
.::f-duck::. |
Болталка |
2 |
16.08.2009 18:25 |
|
Чуть не понятно о winsock на делфи
|
diznt |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
8 |
03.04.2009 21:12 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|