![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
есть код примерно так
Код:
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
|
||||
|
||||
|
Timer1.Enabled:=False наверно все-таки)
if http.ResponseCode=200 then ---> if http.connected then Пробуй ![]() |
|
#3
|
|||
|
|||
|
такой код вобще не работает у меня
Код:
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
|
||||
|
||||
|
Код:
Смотри следующее сообщение Последний раз редактировалось X-rem, 14.08.2010 в 20:54. |
|
#5
|
||||
|
||||
|
Я понял что у тебя не так)
Код:
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; |
|
#6
|
|||
|
|||
|
действительно с другим адресом работает
а с локальным http://127.0.0.1:8080 почему-то не хочет может изза порта, или сервер выдает другие данные? там как бы не сервер стоит, а утилита с веб-интерфесом вот я ее и опрашиваю может можно проверять какнибудь порт, открыт или нет |
|
#7
|
|||
|
|||
|
когда я отключаю утилиту и вебинтерфейс отключается
то ResponseCode возвращает -1 с чего это вдруг вобще не ясно влияют ли настройки прокси в IE на indy? |
|
#8
|
||||
|
||||
|
>влияют ли настройки прокси в IE на indy?
Я не спец. но вроде влияют. >может изза порта, или сервер выдает другие данные? Должно работать без особых наворотов если там не SSL соединение. >проверить порты в Windows Пуск -> выполнить -> cmd и в окно что появилось написать: netstat -ao [enter] Последний раз редактировалось X-rem, 14.08.2010 в 21:06. |
|
#9
|
|||
|
|||
|
вот такой код
Код:
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
|
|||
|
|||
|
я имею ввиду как програмно проверить порт открыт или нет
в tcpview я его вижу |
|
#11
|
|||
|
|||
|
мне кажется какой-то метод будто кеширует или прекращает обработку
потому что при попытке проверить соединение после отключения и включения сервера, оно очень быстро прописывает сообщение дисконекта, не так когда он действительно обращается к серверу. после перезапуска программы, она показывает Конектед мне кажется нужно както освобождать IdHTTP1 и заново его инициализировать Последний раз редактировалось harbor, 14.08.2010 в 21:56. |
|
#12
|
|||
|
|||
|
ну все, победил. такой код нормально обрабатывает
Код:
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
|
||||
|
||||
|
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; |
|
#14
|
|||
|
|||
|
у меня не компилится этот проект, на Delphi 7
что-то с TIdTCPClient не так может у меня старая компонента какаято |
|
#15
|
||||
|
||||
|
установи IdHTTP1.ConnectTimeout:=10000;
|