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

13.05.2010, 11:15
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме: 592199
Репутация:
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
Провел на форуме: 32525
Репутация:
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] это разыменование а нужен адрес и индексация с нуля не забываем
|
|
|

13.05.2010, 11:54
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме: 592199
Репутация:
21
|
|
Сообщение от greki_hoy
странно а должно было быть нарушение доступа
получится примерно так
movsx eax, byte ptr[buffer + 1]
push eax
//... передается не адрес а символ к тому же расширенный в итоге там нечто такого 0x000000df
а запись по такому адресу отловится скорее всего как запись в память отведенную для перехвата нулевых уакзателей а если символ был 0xff получится такой адрес 0xffffffff
напишите так
send(sHwnd, sBuff1, strlen(sBuff), 0);
sBuff1[1] это разыменование а нужен адрес и индексация с нуля не забываем
Проблема не в коде, я поставил Delphi7 все отлично работает, тоже самое в 2010 не хочет не в какую.
|
|
|

13.05.2010, 17:15
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме: 592199
Репутация:
21
|
|
repeat
FillChar(buf,SizeOf(buf),0);
d:=recv(Socket1,buf,SizeOf(buf),0);
for i:=1 to d do html:=html+utf8toansi(buf[i]);
memo1.Lines.Add(html);
until d<=0;
Пытаюсь получить весь HTML код страницы, получаю но из цикла почему то не выходит.
PS/ Задолбал заторможеный idhttp =)
|
|
|

13.05.2010, 17:23
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Сообщение от denjf
Пытаюсь получить весь HTML код страницы, получаю но из цикла почему то не выходит.
PS/ Задолбал заторможеный idhttp =)
Во первых: idHTTP, это компонент из библиотеки Indy.
Во вторых: ты тут Winsock используешь, а не Indy.
В третьих:
Код:
for i:=1 to d do html:=html+utf8toansi(buf[i]);
memo1.Lines.Add(html);
Это вообще неправильный вывод данных в Memo.
Так что еще раз пересмотри свою мысль и пойми, кто "заторможеный".
|
|
|

13.05.2010, 17:46
|
|
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме: 592199
Репутация:
21
|
|
Сообщение от Chrome~
Во первых: idHTTP, это компонент из библиотеки Indy.
Во вторых: ты тут Winsock используешь, а не Indy.
В третьих:
Код:
for i:=1 to d do html:=html+utf8toansi(buf[i]);
memo1.Lines.Add(html);
Это вообще неправильный вывод данных в Memo.
Так что еще раз пересмотри свою мысль и пойми, кто "заторможеный".
Я не много не правельно выразил мысль про idhttp, это было сказанно к тому что он заторможенный по сравнению с winsock, поэтому я решил научится работать с winsock.
Код:
for i:=1 to d do html:=html+utf8toansi(buf[i]);
memo1.Lines.Add(html);
Почему не правельно? В мемо я получаю то что надо. Но немогу понять почему цикл так и продолжает работать.
|
|
|

13.05.2010, 18:03
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Сообщение от denjf
Я не много не правельно выразил мысль про idhttp, это было сказанно к тому что он заторможенный по сравнению с winsock, поэтому я решил научится работать с winsock.
Код:
for i:=1 to d do html:=html+utf8toansi(buf[i]);
memo1.Lines.Add(html);
Почему не правельно? В мемо я получаю то что надо. Но немогу понять почему цикл так и продолжает работать.
idHTTP нормально работает, если им правильно пользоваться.
Все очень просто.
Этот код
Код:
repeat
FillChar(buf,SizeOf(buf),0);
d:=recv(Socket1,buf,SizeOf(buf),0);
for i:=1 to d do html:=html+utf8toansi(buf[i]);
memo1.Lines.Add(html);
until d<=0;
есть неправильным в том смысле, что ты постоянно добавляешь данные к переменной html, и выводишь ее в Memo. Получается, что некоторая часть страница в Memo будет отображаться несколько раз. В общем, надо перед цыклом for написать
Цикл продолжает выполняться потому, что нужно в отправляемых заголовках написать не
Код:
Connection:Keep-Alive
А
Последний раз редактировалось Chrome~; 13.05.2010 в 18:11..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|