Web sitesi çalışıyormu...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
CengRecep
Üye
Mesajlar: 10
Kayıt: 22 Oca 2004 05:32

Web sitesi çalışıyormu...

Mesaj gönderen CengRecep »

Merhabalar..

Arkadaşlarımla birlikte birkaç web sitesi kurduk ve sürekli güncelliyoruz. Fakat bazen sitelerden herhangi biri çalışmıyor. Bu durumda ufak bir müdahale ile düzeltiyoruz. Ama bazı durumlarda sitenin çalışmadığından saatlerce haberimiz olmuyor. Bu duruma bir çare için küçük bir program yazmak istiyorum. Program, örneğin 10 dakikada bir siteleri kontrol edecek,bağlanılamayan siteleri bize haber edecek. İşte sorun burda : Bir siteye bağlanıp-bağlanamadığımı nasıl anlarım? Webbrowser'a linki yazıp bağlan dediğimizde, sorun çıktığı anda "sayfa görüntülenemiyor" başlıklı default sayfa geldiğini hepimiz biliyoruz. Acaba bu sayfanın gelip-gelmediğini mi kotrol etmem gerekiyor? Bir Fikri olan arkadaş varsa çok sevinirim..Bu arada ping çekme yöntemi çalışmaz, çünkü aynı serverda birkaç site çalışıyor,sitenin bir tanesi pasifken diğerleri çalışıyor olabiliyor...

Teşekkürler..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Sitelere ufak bir dosya koy. Mesela 1 KB'lık "kontrol.html" isminde bir dosya. Daha sonrada sitede bulunan kodlar ile (ipucu) bu dosyayı her 10 dakika da bir indir ve içne bak. İçerik düzgünse site çalışıyordur, yoksa çalışmıyordur.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba,

Uses kısmına WinInet i eklemeyi unutma.

Kod: Tümünü seç

 Function CheckUrl(url:string):boolean;
 var
 hSession, hfile, hRequest: hInternet;
 dwindex,dwcodelen :dword;
 dwcode:array[1..20] of char;
 res : pchar;
 begin
   if pos('http://',lowercase(url))=0 then
      url := 'http://'+url;
   Result := false;
   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;
Kullanım şekli örnek

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
Var
    Durum:Boolean;
begin
    Durum := CheckUrl('www.yahoo.com');

    if Durum = True Then
        ShowMessage('Açık')
    Else
        ShowMessage('Kapalı')

end;
Kolay Gelsin...
En son husonet tarafından 03 Eyl 2004 04:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
CengRecep
Üye
Mesajlar: 10
Kayıt: 22 Oca 2004 05:32

Teşekkürler

Mesaj gönderen CengRecep »

Merhaba, CheckUrl fonksiyonu işime yaradı. Gönderen arkadaşa teşekkür ediyorum.
Tesla

Mesaj gönderen Tesla »

Selamlar,
@husonet
Verdiğiniz checkurl kodunu denedim çok güzel çalışıyor ama butona bastığımda form bir süre donuyor ve webden veriyi aldıktan sonra açık yada kapalı diyor. Mesela biz bununla arka arkaya 3-4 site kontrol ettirsek ve bir memoya açık kapalı yazdırsak... ozaman program kilitlenir gibi olacak.. Bunu engellemek için ne yapabiliriz?

Sanırım çözüm thread, eğer öyleyse nasıl yapılır örnek vermeniz mümkün mü? thread olayına yabancıyım.

Saygılar.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Tesla

Mesaj gönderen Tesla »

@sadettinpolat,
Yazılanlar bana çok karışık geldi, senkronize etsekmi etmesek mi ne yapsak belli değil :) thread içinde elde ettiğim değeri uygulamama neyle nasıl göndereyimde hata oluşmasın... hiç anlamadım. Yok mu bu acemiye yardım edecek?

Bana gerekli olan, checkurl fonksiyonunu, formu dondurmadan birkaç site kontrol edebilmesi.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

@tesla, verdigim linkteki yazilari sabirla okumamissin. o yuzden karisik gelmis sana. ben mesaji 12:08 de atmisim. sen benim mesaji ne zaman gordunde ne zaman o makaleleri okudunda ne zaman bu cevabi yazdin ? 1:25

ben o makalelerin her bir sayfasina 1 saatten cok zaman ayirdim iyice anlayabilmek icin, sen 1 saatte yuzeysel okuyup gecersen karisik gelir tabi.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

fatih tolga ve Sadettin emeğinize sağlık
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

ikutluay yazdı:fatih tolga ve Sadettin emeğinize sağlık

http://tr.delphiblog.net/2006/07/25/ned ... igimiz.htm
adresindeki yazi bana ait degildir. Tugrul Helvaci adli arkadasimiza aittir.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Tesla

Mesaj gönderen Tesla »

@sadettinpolat,
Bu akşam tekrar okuyacağım, aslında anlamadığım şey, senkronize meselesini kullanmalı mıyım ve ana formuma thread dan gelen karşıdaki web adresinin açık olup olmama bilgisini nasıl ileteceğim.

Burada bir örnek gördüm
Akşama bir deneme kodu yazmaya çalışacağım. Takıldığım yerde yine başınızı ağrıtırım izin verirseniz.
Tesla

Mesaj gönderen Tesla »

Selam, bir deneme yaptım, threadın başlayıp bittiğini delphiden görebiliyorum ama execute kısmına yazdığım şeyi yapmadı. Ana formdaki memo ya yazı yazmasını istiyorum checkurl den önce. senkronize kullanmadım.

threaddeneme.rar - 0.17MB

Bir önceki mesajımdaki linkteki kodu kendime uyarlamaya çalıştım.

Thread:

Kod: Tümünü seç

unit MyThread;

interface

uses
    Classes, ExtCtrls, Wininet, windows, strutils;

type
    thrMyThread = class(TThread)
    private
    { Private declarations }
        thrurl, thrhtm: string;
//        thrImg: Timage;
    protected
        procedure Execute; override;
//        procedure ImajYukle;
    public
        constructor create(url, htm:string);
        destructor Destroy; override;
    end;

implementation

uses SysUtils, sxHFetch;

{ thrMyThread }

constructor thrMyThread.create(url, htm: string);
begin
    inherited create(True);
    FreeOnTerminate := True;
    thrurl := url;
    thrhtm := htm;
    Priority := tpLowest;
    resume;
end;

destructor thrMyThread.Destroy;
begin

  inherited;
end;

procedure thrMyThread.Execute;
begin
    try
        thrhtm:='deneme 123';
//        Synchronize(ImajYukle);
    except
        // Event handler konulabilir. Misal Synchronize(DoException);
    end;
end;

{
procedure thrMyThread.ImajYukle;
begin
    thrImg.Picture.LoadFromFile(thrldosya);
    DeleteFile(thrldosya);
end;
}
end.
Ana form:

Kod: Tümünü seç

unit sxHFetch;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label3: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  sss:string;

implementation

uses MyThread;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   if (edit1.Text='') then
   begin
     showmessage('cizmedinki kesesin!!!');
     exit;
   end;
   Memo1.Clear;
   sss:='';
   thrMyThread.Create(Edit1.Text, Memo1.Lines.Text);
//   Memo1.Lines.Text:=sss;    // boyle olmuyor
end;

end.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

ana formdaki memoya yazi yazmasini istiyorsan ana formadaki memoyu parametre olarak thread nesnesine gecmen lazim.

Threadin Create olayini soyle yap.

Kod: Tümünü seç

   thrMyThread = class(TThread)
    private
    FMemo:TMemo; // dikkat !!
    { Private declarations }
        thrurl, thrhtm: string;
    protected
        procedure Execute; override;
    public
        constructor create(url: string; aMemo: TMemo); //dikkat !!
        destructor Destroy; override;
    end;



constructor thrMyThread.create(url:string; aMemo: TMemo);
begin
    inherited create(True);
    FreeOnTerminate := True;
    thrurl := url;
    Priority := tpLowest;
    fMemo:=aMemo; //dikkat !!
    resume;
end;


procedure thrMyThread.Execute;
begin
    try
        FMemo.Lines.Add('thread basliyor....'); //ana formdaki memoya ekler
    except
    end;
end;


//ana formdan cagirirken

thrMyThread.Create(Edit1.Text, Memo1);

Synchronize kullanmadan ana formdaki memoya bu sekilde ulasabilirsin.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Tesla

Mesaj gönderen Tesla »

sadettinpolat hocam çok teşekkürler, denedim çalışıyor.
Son bir soru: eğer memo değilde ana formdaki bir string değişkenine yazmak istesem? Onu nasıl yaparım? Aynı şekilde string tanımlayıp çağırırken değişkeni yazarak denedim olmadı.
Çoklu thread kullanan uygulamalarda veri transferini nasıl yapıyorlar? Bir tür stack mı kullanılıyor?

Eğer bunuda açıklarsanız konuyu iyice anlamış olacağım.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

http://www.diyezon.com/?p=61&page=2

thread nesnesi icinden formdaki degiskenlere , bilesenlere nasil ulasabilecegin yaziyor burda aslinda.

form1 deki stringe Synchronize metodunu kullanarak ulasabilir, degerlerini thread icinden degistirebilirsin.

Kod: Tümünü seç


    thrMyThread = class(TThread)
    private
        FmyString:String;
    protected
        procedure Execute; override;
        procedure StringiGuncelle;
    public
    end;


procedure thrMyThread.Execute;
begin
    try

        FmyString := 'Thread Calisiyor...';//stringe degeri burda atiyoruz
        Synchronize(StringiGuncelle);
    except
        // Event handler konulabilir. Misal Synchronize(DoException);
    end;
end;


procedure thrMyThread.StringiGuncelle;
begin
  form1.myString := fmyString; //yukarida atadigmiz degeri form1 deki stringe atiyoruz.
end;



// form1 de 

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label3: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    myString:String; //stringi burda tanimliyoruz...
    { Public declarations }
  end;
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla