Траблы с Winsock

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by denjf, 12 May 2010.

  1. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Что не так сделал??
    Код взял тут на форуме.
    В мемо добавляется пустая строка в результате.
    Использую Delphi 10
     
  2. crystalbit

    crystalbit Elder - Старейшина

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    проверяй для начала то, что возвращают функции

    посмотри тут
     
    1 person likes this.
  3. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Я так делал, мурыжил долго.

    Если делаю запрос к parsers.info в консоле возвращает знаки вопроса в 2 строчке. К другим сайтам вообще не че не возвращает и ошибку не где не выдает.
     
  4. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Попробуй убрать заголовки которые начинаются на "Accept"
     
    1 person likes this.
  5. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Эфект такой же. Может дело в Delphi 2010??
     
  6. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Удали строчку
    Code:
    'Accept-Encoding:gzip, deflate'+ #13#10 +
    и будет тебе счастье.
     
    1 person likes this.
  7. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Эфекта ноль(((
     
  8. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    так:
     
  9. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Не работает!
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    снифер в руки и вперед за родину.

    CopyMemory(@sBuff,pchar(sBuff1),length(sBuff1));
    send(sHwnd, sBuff, Length(sBuff), 0);
    recv(sHwnd, rBuff, Length(rBuff), 0);

    это код полный пздц.
    Отправляй данный сразу из строки, без промежуточного буфера.
    А вот когда считываешь, то указывай не Length(rBuff) а размер буфера в байтах. или юзай sizeof
     
  11. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    send(sHwnd, sBuff1[1], Length(sBuff), 0);


    recv(sHwnd, rBuff, sizeof(rBuff), 0);
    Memo1.Lines.Add(rBuff);

    PS Только начал изучать винсок.

    Вот что вернулось в ответ 訄

    В Delphi 7 все работает!!! А в 2010 нихера (((
     
    #11 denjf, 13 May 2010
    Last edited: 13 May 2010
  12. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    странно а должно было быть нарушение доступа
    получится примерно так
    movsx eax, byte ptr[buffer + 1]
    push eax
    //... передается не адрес а символ к тому же расширенный в итоге там нечто такого 0x000000df
    а запись по такому адресу отловится скорее всего как запись в память отведенную для перехвата нулевых уакзателей а если символ был 0xff получится такой адрес 0xffffffff
    напишите так
    send(sHwnd, sBuff1, strlen(sBuff), 0);
    sBuff1[1] это разыменование а нужен адрес и индексация с нуля не забываем
     
  13. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1

    Проблема не в коде, я поставил Delphi7 все отлично работает, тоже самое в 2010 не хочет не в какую.
     
  14. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1


    Пытаюсь получить весь HTML код страницы, получаю но из цикла почему то не выходит.

    PS/ Задолбал заторможеный idhttp =)
     
  15. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Во первых: idHTTP, это компонент из библиотеки Indy.
    Во вторых: ты тут Winsock используешь, а не Indy.
    В третьих:
    Code:
    for i:=1 to d do html:=html+utf8toansi(buf[i]);
    memo1.Lines.Add(html);
    Это вообще неправильный вывод данных в Memo.

    Так что еще раз пересмотри свою мысль и пойми, кто "заторможеный".
     
  16. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1

    Я не много не правельно выразил мысль про idhttp, это было сказанно к тому что он заторможенный по сравнению с winsock, поэтому я решил научится работать с winsock.

    Code:
    for i:=1 to d do html:=html+utf8toansi(buf[i]);
    memo1.Lines.Add(html);
    Почему не правельно? В мемо я получаю то что надо. Но немогу понять почему цикл так и продолжает работать.
     
  17. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    idHTTP нормально работает, если им правильно пользоваться.
    Все очень просто.
    Этот код
    Code:
    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 написать
    Code:
    html := '';
    Цикл продолжает выполняться потому, что нужно в отправляемых заголовках написать не
    Code:
    Connection:Keep-Alive
    А
    Code:
    Connection: close
     
    #17 Chrome~, 13 May 2010
    Last edited: 13 May 2010
    2 people like this.