Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2011, 13:40   #1
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию WinSock. Прием данных

Работаю с WinSock. Данные с сайта (Загрузка обычных страниц http) получаю в цикле приема:
Код:
        
var
buf             : array [0..1023] of Char;
tmp             : String;
...
ZeroMemory(@buf, 1024);
      RcvLen:=recv(Sock,buf,1024,0);
        while RcvLen > 0 do
          begin
            Tmp := Tmp + Copy(buf, 0, RcvLen);
            RcvLen  := recv(sock, buf, 1024, 0);
          end;
В итоге данные получаются полностью, но только при больших объемах текста выплавает вот что, например:

Код:
<td valign='middle' class='row4' width='15%'><img src='starmod.gif' bor
111с
der='0' alt='Master' title='Master'> <a name='entry1
Как избавится от неизвестно от чего берушихся #13111c#13, при получении данных? Из-за чего такое происходит?

Последний раз редактировалось Denager; 12.05.2011 в 13:42.
Denager вне форума Ответить с цитированием
Старый 13.05.2011, 09:16   #2
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Взял, ради интереса, перевел эти символы из hex в dec..
Оказалось, что это размер принятых данных.. Не думал, что в html еще эта служебная информация передается..
Вопрос снят
Denager вне форума Ответить с цитированием
Старый 13.05.2011, 11:25   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Не думал, что в html еще эта служебная информация передается

не надо валить с больной головы на здоровую. Ни HTTP, ни тем более HTML ничего подобного не передаёт и не содержит. Ошибка 100% в твоём коде.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 13.05.2011, 11:47   #4
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Имелось ввиду http.
Код перед вами, в чем ошибка?
Denager вне форума Ответить с цитированием
Старый 13.05.2011, 15:05   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

хрен знает. У меня такой код нормально вроде работает в седьмой Дельфи):

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sock: TSocket;
  buf: array [0..1023] of Char;
  tmp: String;
  RcvLen: Integer;
  host: PHostEnt;
  addr: sockaddr_in;
  ip: pInteger;
  d: WSAData;
begin
  WSAStartup($0101, d);
  //
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  //
  host := gethostbyname('google.ru');
  ip := pInteger(host.h_addr_list^);
  //
  addr.sin_family := AF_INET;
  addr.sin_port := htons(80);
  addr.sin_addr.S_addr := ip^;
  //
  connect(sock, addr, sizeof(addr));
  //
  tmp := 'GET / HTTP/1.0'#13#10'Host: www.google.ru'#13#10#13#10;
  send(sock, tmp[1], length(tmp), 0);
  tmp := '';
  //
  ZeroMemory(@buf, 1024);
  RcvLen := recv(Sock, buf, 1024, 0);
  while RcvLen > 0 do begin
    //
    Tmp := Tmp + Copy(buf, 0, RcvLen);
    RcvLen  := recv(sock, buf, 1024, 0);
  end;
  //
  Memo1.Text := Tmp;
  //
  WSACleanup();
end;
соединение без прокси?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 14.05.2011, 14:21   #6
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Если размер принимаемых данных меньше MTU то у меня также все нормально..
"весомые" страницы прнимаются именно вышеописанным образом
Denager вне форума Ответить с цитированием
Старый 14.05.2011, 22:45   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

я в свой пример поставил lenta.ru, принялось 160 КБ без всяких проблем

глянь уж снифером, что там передается, а то мистика на ровном месте
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прием данных в поток Indy10 sunnmas Работа с сетью в Delphi 3 13.04.2011 18:03
php, perl прием данных, чтобы сообщения доходили без перезагрузки страницы Delphinchik Perl 1 16.02.2011 21:07
Прием и передача данных в PCI_E устройство Andrei4 Помощь студентам 2 12.11.2010 18:33
Прием данных по DDE chigik Microsoft Office Excel 3 13.05.2009 10:47
Система мониторинга: Отправка данных+Прием+Обработка+Просмотр Руслан Сагитов Помощь студентам 4 13.10.2008 17:44