Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматич. чтение данных с Яндекса 
:(
    Опции темы
Vladimir_K
Дата 13.1.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Придумал программулину для авто чтения данных о котировках валют, погоде и т.д. с Яндекса.
Прога соединяется с Инетом, заходит на Яндекс, берет данные, выводит на экран и отключает Инет.
Через некоторое время опять соединяется и т.д.
Соединение использую dial-up.
Пока что таймер не делал, прога в данном варианте постоянно соед./разъед. с Инетом.
Иногда работа нарушается и выскакивает сообщение: 

Socket Error # 10054
Connection reset by peer.

Что оно означает?
Прога запускается нажатием Button2 - если соединения в данный момент нет - идет подключение.
Вобщем прога работает нестабильно.
В чем я сделал ошибку?
На ваш профессиональный взгляд ошибки сразу будут видны. Подскажите, пожалста.

Код

unit Autolook_P;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdHttp, StdCtrls, ComCtrls, ActiveX, MsHtml, IdBaseComponent,
  IdCookieManager, IdComponent, IdTCPConnection, IdTCPClient, IdIntercept,
  IdSocks, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, WinInet, Registry, WinSock;

type
  TForm1 = class(TForm)
    Button2: TButton;
    Button3: TButton;
    RichEdit1: TRichEdit;
    IdHTTP1: TIdHTTP;

    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }

    procedure Connect(N,s:string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var C:integer=0;     //Счетчик заходов на сайт

// Поиск данных -----------------------------------------------------------------
procedure TForm1.Connect(N,s:string);
var i:integer;
begin
if s<>'' then
 begin
  i:=Pos(AnsiLowerCase('Котировки'),AnsiLowerCase(s));
  if i<=0 then
   begin
    RichEdit1.Lines.Add('Ошибка');
    exit;
   end
   else
   begin
    .
    .          - здесь чтение данных и т.д.
    .
   end;
end;
end;

function IsConnection(URL:string):boolean;
var
  hSession,hfile: hInternet;
  dwindex,dwcodelen: dword;
  dwcode: array[1..20] of char;
  res: pchar;
begin
Result:= false;
if URL = '' then exit;
hSession:= InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,nil,
nil, 0);
if assigned(hsession) then
begin
  hfile:= InternetOpenUrl(hsession,pchar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
  dwIndex:= 0;
  dwCodeLen:= 10;
  HttpQueryInfo(hfile,HTTP_QUERY_STATUS_CODE,@dwcode,dwcodeLen,dwIndex);
  res:= pchar(@dwcode);
  result:= (res ='200') or (res ='302');
  if assigned(hfile) then InternetCloseHandle(hfile);
  InternetCloseHandle(hsession);
end;
end;

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
var lData: TStringList;
    N,s:string;
    url:string;
begin
// проверка подключения к Интернету: если соединения нет - подключиться:
 url:='http://www.yandex.ru/';
 if IsConnection(url) then
  RichEdit1.Lines.Add('Есть подключение к Интернету!')
  else
  begin
   RichEdit1.Lines.Add('Подключение к Интернету отсутствует...');
   Button2Click(Sender);
  end;

 N:='yandex.ru/ ';
 lData := TStringList.Create;

 try
  IdHTTP1.Post('http://www.yandex.ru/', lData);
 finally
  lData.Free;
 end;

 try
  s:=IdHTTP1.Get('http://www.yandex.ru/');
  Connect(N,s);                  //Проверка подключения
 except
  N:='yandex.ru/: Нет соединения с сервером...';
  s:='';
  Connect(N,s);                  //Вывод результата на экран
 end;

  Button3Click(Sender);
  Button2Click(Sender);
end;


// Отключить соединение

procedure TForm1.Button3Click(Sender: TObject);
type
PRasConn=^TRasConn;
TRasConn=record
 dwSize:DWord;
 hRasConn:THandle;
 szEntryName:array [0..20] of Char;
end;
TRasHangUp=function(hRasConn:THandle):DWord; stdcall;
TRasEnumConnections=function(RasConn:PChar; var bSize:DWord;
                             var ConnCount:DWord):DWord; stdcall;
var RasApi:Cardinal;
   RasEnumConnections:TRasEnumConnections;
   RasHangUp:TRasHangUp;
   bSize,ConnCount,j:DWord;
   RasConn:TRasConn;
   ArrRasConn,RasOld:PChar;
begin
RasApi:=LoadLibrary('RasApi32.dll');
if RasApi<>0 then
 begin
  RasEnumConnections:=GetProcAddress(RasApi,'RasEnumConnectionsA');
  RasHangUp:=GetProcAddress(RasApi,'RasHangUpA');
  if (Assigned(RasEnumConnections))and(Assigned(RasHangUp)) then
   begin
    bSize:=0;
    RasConn.dwSize:=SizeOf(TRasConn);
    RasEnumConnections(@RasConn,bSize,ConnCount);
    if bSize>0 then
     begin
      RichEdit1.Lines.Add('Активных Dial-Up соединений: '+IntToStr(ConnCount));
      try
       GetMem(ArrRasConn,bSize);
       PRasConn(ArrRasConn)^.dwSize:=SizeOf(TRasConn);
       j:=bSize;
       RasOld:=ArrRasConn;
       if RasEnumConnections(ArrRasConn,j,ConnCount)=0 then
        for j:=1 to ConnCount do
         begin
          RichEdit1.Lines.Add('Соединение '+IntToStr(j)+':');
          RichEdit1.Lines.Add(' - Дескриптор: '+IntToStr(PRasConn(ArrRasConn)^.hRasConn));
          RichEdit1.Lines.Add(' - Название: '+PRasConn(ArrRasConn)^.szEntryName);
          Inc(C);
          RichEdit1.Lines.Add('Соединение №'+IntToStr(C));
          RichEdit1.Lines.Add('');
          {Отключаем соединение}
          try
           while RasHangUp(PRasConn(ArrRasConn)^.hRasConn)=0 do
            begin
             Application.ProcessMessages;
             Sleep(0);
            end;
          except
          end;
          inc(PRasConn(ArrRasConn));
         end;
       FreeMem(RasOld,bSize);
      except
      end;
     end;
   end;
  FreeLibrary(RasApi);
 end;
end;

end.

--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
ne0n
Дата 13.1.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: нет
Всего: 11



Цитата

WSAECONNRESET (10054)
•    Translation: Connection reset by peer.
•    Description: An existing connection was forcibly closed by the remote host. This error typically occurs if the peer program on the remote host is suddenly stopped, the host is restarted, or the remote host uses a hard close. See setsockopt (Wsapiref_94aa.asp) for more information about the SO_LINGER option on the remote socket. This error may also result if a connection was broken because of keep-alive activity that detects a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET. 


судя по описанию ошибки,  проблема может быть и не в программе smile 

Это сообщение отредактировал(а) ne0n - 13.1.2008, 17:19
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.1.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Понял, спасибо.
Прога, в принципе, работает нормально. Эта ошибка появляется редко.
Буду дальше разбираться.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.