Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.08.2010, 16:40
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию Проверка соединения работает не корректно

есть код примерно так

Код:
http:TidHttp;
....
procedure TForm1.Timer1Timer(Sender: TObject);
var
s1,s2,s3 :string;
i, k :integer;

begin
   Timer1.Enabled:=true;
try
     page1:=http.get('http://127.0.0.1:8080');
    if http.ResponseCode=200 then
    ...рабочий код..
except
   ...
   Label4.Caption :=IntToStr(http.ResponseCode);
   ...
   end;

так вот, пока локальный сервер запущен условие срабатывает нормально
потом сервер выключаю и он недоступен, условие не срабатывает
когда снова включаю сервер, у меня это условие уже не работает, то есть рабочий код не исполняется, хотя сервер доступен.

в чем загвоздка не ясно
процедура таймера запускается от кнопки на форме
Ответить с цитированием
  #2  
Старый 14.08.2010, 20:07
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

Timer1.Enabled:=False наверно все-таки)
if http.ResponseCode=200 then ---> if http.connected then

Пробуй
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)
Ответить с цитированием
  #3  
Старый 14.08.2010, 20:22
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

такой код вобще не работает у меня
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 try
  //Edit2.Text:=http://127.0.0.1:8080
idHTTP1.Get(Edit2.Text);
if IdHTTP1.connected
then
Edit1.Text:='Ресурс доступен';
except
Edit1.Text:='Произошла ошибка';
end;
end;

не выводит сообщения
Ответить с цитированием
  #4  
Старый 14.08.2010, 20:26
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

Код:
 Смотри следующее сообщение 
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)

Последний раз редактировалось X-rem, 14.08.2010 в 20:54.
Ответить с цитированием
  #5  
Старый 14.08.2010, 20:53
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

Я понял что у тебя не так)
Код:
begin
   Timer1.Enabled:=False;
try
     page1:=http.get('http://127.0.0.1:8080');
    if http.ResponseCode=200 then begin
    ...рабочий код..
    end else ShowMessage('Нету подключения');
except
   ...
   ShowMessage('Нету подключения [Error]');
   Label4.Caption :=IntToStr(http.ResponseCode);
   ...
   end;
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)
Ответить с цитированием
  #6  
Старый 14.08.2010, 20:57
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

действительно с другим адресом работает
а с локальным http://127.0.0.1:8080 почему-то не хочет
может изза порта, или сервер выдает другие данные?
там как бы не сервер стоит, а утилита с веб-интерфесом
вот я ее и опрашиваю

может можно проверять какнибудь порт, открыт или нет
Ответить с цитированием
  #7  
Старый 14.08.2010, 21:01
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

когда я отключаю утилиту и вебинтерфейс отключается
то ResponseCode возвращает -1
с чего это вдруг вобще не ясно
влияют ли настройки прокси в IE на indy?
Ответить с цитированием
  #8  
Старый 14.08.2010, 21:03
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

>влияют ли настройки прокси в IE на indy?
Я не спец. но вроде влияют.

>может изза порта, или сервер выдает другие данные?
Должно работать без особых наворотов если там не SSL соединение.

>проверить порты в Windows
Пуск -> выполнить -> cmd
и в окно что появилось написать:
netstat -ao [enter]
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)

Последний раз редактировалось X-rem, 14.08.2010 в 21:06.
Ответить с цитированием
  #9  
Старый 14.08.2010, 21:28
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

вот такой код
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 try
  //Edit2.Text:=http://127.0.0.1:8080
idHTTP1.Get(Edit2.Text);
if idHTTP1.ResponseCode=200 then begin

ShowMessage('Connected'); end else ShowMessage(IntToStr(idHTTP1.ResponseCode));
except
   ShowMessage('Not Connected '+IntToStr(idHTTP1.ResponseCode));
end;
end;

работает странным образом
если сервер доступен то вроде как пишет конектед
как только отключаю, то пишет Not Connected, но ResponseCode пишет все равно 200, как будто бы он сохранился с момента коннекта. а после старта сервера уже не показывает что есть подключение.
вот какойто глюк странный с этим кодом

Последний раз редактировалось harbor, 14.08.2010 в 21:45.
Ответить с цитированием
  #10  
Старый 14.08.2010, 21:38
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

я имею ввиду как програмно проверить порт открыт или нет
в tcpview я его вижу
Ответить с цитированием
  #11  
Старый 14.08.2010, 21:52
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

мне кажется какой-то метод будто кеширует или прекращает обработку
потому что при попытке проверить соединение после отключения и включения сервера, оно очень быстро прописывает сообщение дисконекта, не так когда он действительно обращается к серверу.
после перезапуска программы, она показывает Конектед

мне кажется нужно както освобождать IdHTTP1 и заново его инициализировать

Последний раз редактировалось harbor, 14.08.2010 в 21:56.
Ответить с цитированием
  #12  
Старый 14.08.2010, 22:06
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

ну все, победил. такой код нормально обрабатывает

Код:
var
  Form1: TForm1;
  http:TidHttp;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
http:=TIdHTTP.Create(Self);
 try
 http.Get(Edit2.Text);
 if http.ResponseCode=200 then begin

 Edit1.Text:='Connected'; end else Edit3.Text:='иначе'+IntToStr(http.ResponseCode);
 except
  Edit3.Text:='Not Connected '+IntToStr(http.ResponseCode);
 end;
http.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:='--';
Edit3.Text:='--';
end;

end.
Ответить с цитированием
  #13  
Старый 14.08.2010, 22:24
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

http://slil.ru/29563430
Навалял функцию:

Код:
function CheakPort(ip:String; port:Word; timeout:Word; debug:Boolean):Boolean;
var
cc:TIdTCPClient;
// uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
begin
  Result:=False;
  cc:=TIdTCPClient.Create;
  cc.Port:=port;
  cc.ConnectTimeout:=timeout;
  cc.Host:=ip;
  try
  cc.Connect;
  if cc.Connected then begin
  if debug then ShowMessage('Debug:Connected');
  Result:=True;
  end else if debug then if not cc.Connected then ShowMessage('Debug:Not connected');
  except if debug then ShowMessage('Some Shit Was Happend') end;
  cc.Disconnect;
  cc.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// если выставить True будут всплывающие сообщения, говорящии подключились или нет
if CheakPort('127.0.0.1',5000,80,False) then begin
  Label1.Caption:='Работаем ^_^';
  // ... рабочий код
  end else Label1.Caption:='Не работаем';
end;
Поидее проще будет)
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)
Ответить с цитированием
  #14  
Старый 15.08.2010, 08:37
harbor harbor вне форума
Новичок
 
Регистрация: 15.01.2010
Сообщения: 83
Репутация: 10
По умолчанию

у меня не компилится этот проект, на Delphi 7
что-то с TIdTCPClient не так
может у меня старая компонента какаято
Ответить с цитированием
  #15  
Старый 15.08.2010, 09:17
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

установи IdHTTP1.ConnectTimeout:=10000;
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter