Arşiv Anasayfa VCL (Delphi Visiual Component Library)
Sayfalar: 1
Indy Bileşenleri 2 Gönderen: xbarakuda Tarih: 08 October 2005 19:50:21
           İNDY BİLEŞENLERİNE DEVAM
     İNDTCPSERVER ve CLİENT uygulamaları geliştirmeye devam ediyoruz
    Okul yıllarında yazmış olduğum bir uygulamayı sizle paylaşmak istiyorum
    Program kısaca açıklamak gerekirse email benzer haberleşme yemek listesini
Almak gibi fonksiyonları olan basit bir program yapım aşamasında İHSAN         & nbsp;         & nbsp;    KARAGÜLLE NİN İNTERNET PROGRAMCILIGI kitabından yararlanmıştım
Delphi 6 kullanmıştım ama delphi 7 tekrar derledim öyle ağım şahım bir şey deyil
Zaten düşük not almıştım

Server kısmını yazmandan önce vt mizi oluşturalım ben paradox kullandım isterseniz firebir kullana bilirsiniz fark etmez 4 ayrı vt oluşturdum bunlar user, yemek listesi ,mesajlar,dersler
Tek bir vt oluşturmayın ozman boş veri geliyor
                                                               SERVER KISMI



   ANA FORMUN KODU
:
var
  Form1: TForm1;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8;

{$R *.dfm}
  var
kullanici:string;

procedure TForm1.yemeklistesi1Click(Sender: TObject);
begin
form2.show;
end;

procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Idtcpserver1.DefaultPort:=1111;
Idtcpserver1.Active:=true;
 statusbar1.Panels[0].Text:='server aktif';
 rzmemo1.Clear;
end;

procedure TForm1.RzBitBtn2Click(Sender: TObject);
begin

Idtcpserver1.Active:=false;
 statusbar1.Panels[0].Text:='server kapalı';
 rzmemo1.Lines.SaveToFile('server log.txt');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  statusbar1.Panels[0].Text:='server pasif';
  if fileexists('server log.txt') then
  rzmemo1.Lines.LoadFromFile('server log.txt');

end;

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
var
SIFRE:string;
begin

rzmemo1.Lines.Add(athread.Connection.Socket.Binding.PeerIP+' adresinden baglantı istegi geldi');

athread.Connection.WriteLn('kulanıcı.adı:');
kullanici:=athread.Connection.ReadLn;
rzmemo1.Lines.Add(kullanici+'sisteme girmeye calışıyor');
if form3.Table1.Locate('adi',kullanici,[]) then
begin
rzmemo1.Lines.Add(kullanici+'sifre soruluyor');
athread.Connection.WriteLn('ŞİFRE:');
SIFRE:=athread.Connection.ReadLn;
rzmemo1.Lines.Add(kullanici+'kullanıcısı'+SIFRE+'ile sisteme girmeye çalışıyor');
if SIFRE=form3.Table1.FieldByName('sifre').Asstring then
begin
rzmemo1.Lines.Add(kullanici+'için şifre kabul edildi');
athread.Connection.WriteLn('şifre kabul edildi');



end
else
begin
rzmemo1.Lines.Add(kullanici+'için şifre kabul edilmedi');
athread.Connection.WriteLn('şifre kabul edilmedi');
athread.Connection.Disconnect;
end;
end
else
begin
athread.Connection.WriteLn('hata');
athread.Connection.WriteLn('kullanici adı bulunamadı');
rzmemo1.Lines.Add(kullanici+'sisteme giremedi');
athread.Connection.Disconnect;
end;
end;
procedure TForm1.ssss1Click(Sender: TObject);
begin
form3.Show;
end;

procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
rzmemo1.Lines.Add(kullanici+' bağlantıyı kesti');
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var komut:string;
kulanici,gun,saat,yemek1,yemek2,yemek3,yemek4,yemek5,yemek6, uyeadi,sifre:string;
tarih,user,konu,mesaj,mt,kime,kns,mes:string;
begin

if athread.Connection.Connected then
begin
komut:=athread.Connection.ReadLn;
if komut='liste' then
begin
RZmemo1.Lines.Add(kullanici+' KULLANICIYA YEMEK LİSTESİ GÖNDERİLİYOR');
athread.Connection.WriteLn('liste:');
form2.Table1.First;
while not form2.Table1.Eof do
begin
kulanici:=form2.Table1.fieldbyname('tarih').AsString;

gun:=form2.Table1.fieldbyname('gün').AsString;
saat:=form2.Table1.fieldbyname('yemeksaati').AsString;
yemek1:=form2.Table1.fieldbyname('yemek1').AsString;
yemek2:=form2.Table1.fieldbyname('yemek2').AsString;
yemek3:=form2.Table1.fieldbyname('yemek3').AsString;
yemek4:=form2.Table1.fieldbyname('yemek4').AsString;
yemek5:=form2.Table1.fieldbyname('yemek5').AsString;
yemek6:=form2.Table1.fieldbyname('yemek6').AsString;
athread.Connection.WriteLn(kulanici);
athread.Connection.WriteLn(gun);
athread.Connection.WriteLn(saat);
athread.Connection.WriteLn(yemek1);
athread.Connection.WriteLn(yemek2);
athread.Connection.WriteLn(yemek3);
athread.Connection.WriteLn(yemek4);
athread.Connection.WriteLn(yemek5);
athread.Connection.WriteLn(yemek6);



form2.Table1.Next;
     end;
athread.Connection.WriteLn('liste sonu:');
RZmemo1.Lines.Add(kullanici+' kullanıcısına liste gönderildi ');
 end;
    if komut='genelmesaj' then
       begin
      RZmemo1.Lines.Add(kullanici+'genel mesaj gönderiliyor');
athread.Connection.WriteLn('mesaj:');
form4.Table1.First;
while not form4.Table1.Eof do
begin

tarih:=form4.Table1.fieldbyname('mesajtarihi').AsString;
user:=form4.Table1.fieldbyname('mesajyazan').AsString;
konu:=form4.Table1.fieldbyname('mesajinkonusu').AsString;
mesaj:=form4.Table1.fieldbyname('mesaj').AsString;
athread.Connection.WriteLn(tarih);
athread.Connection.WriteLn(user);
athread.Connection.WriteLn(konu);
athread.Connection.WriteLn(mesaj);
form4.Table1.Next;
end;
athread.Connection.WriteLn('liste sonu:');
RZmemo1.Lines.Add(kullanici+'genel mesaj gönderildi');
end;
if komut='genelmesajyaz' then
begin
RZmemo1.Lines.Add(kullanici+'genel mesaj yazıyor');
 tarih:=athread.Connection.ReadLn;
 user:=athread.Connection.ReadLn;
 konu:=athread.Connection.ReadLn;
 mesaj:=athread.Connection.ReadLn;
 form4.Table1.Append;
 form4.Table1.FieldByName('mesajtarihi').AsString:=tari h;
  form4.Table1.FieldByName('mesajyazan').AsString:=user;
   form4.Table1.FieldByName('mesajinkonusu').AsString:=konu;
    form4.Table1.FieldByName('mesaj').AsString:=mesaj;
    form4.Table1.Post;
    end;
    athread.Connection.WriteLn('mesajsonu:');
RZmemo1.Lines.Add(kullanici+'mesaj alındı');
end;
if komut='mesaj'then
begin

   RZmemo1.Lines.Add(kullanici+'özel mesajları gönderiliyor');
    if form7.Table1.Locate('kime',kullanici,[]) then
    begin
    athread.Connection.WriteLn('özel mesaj:');
form7.Table1.First;
while not form7.Table1.Eof do
begin
mt:=form7.Table1.fieldbyname('mesajTarihi').AsString;

kime:=form7.Table1.fieldbyname('kime').AsString;
kns:=form7.Table1.fieldbyname('konusu').AsString;
mes:=form7.Table1.fieldbyname('mesaj').AsString;
athread.Connection.WriteLn(mt);
athread.Connection.WriteLn(kime);
athread.Connection.WriteLn(kns);
athread.Connection.WriteLn(mes);
form7.Table1.Next;
end;
athread.Connection.WriteLn('liste sonu:');
RZmemo1.Lines.Add(kullanici+'genel mesaj gönderildi');


end;
if komut='mesajyaz' then
begin

 mt:=athread.Connection.ReadLn;
kime:=athread.Connection.ReadLn;
kns:=athread.Connection.ReadLn;
 mes:=athread.Connection.ReadLn;
 form7.Table1.Append;
 form7.Table1.FieldByName('mesajTarihi').AsString:=mt;
  form7.Table1.FieldByName('kime').AsString:=kime;
   form7.Table1.FieldByName('konusu').AsString:=kns;
    form7.Table1.FieldByName('mesaj').AsString:=mes;
    form7.Table1.Post;


end;
end;
 end;
procedure TForm1.genelmesajlar1Click(Sender: TObject);
begin
form4.Show;
end;

procedure TForm1.sss1Click(Sender: TObject);
begin
form5.Show;
end;

procedure TForm1.RzBitBtn5Click(Sender: TObject);
begin
form6.show;

  rzmemo1.Lines.LoadFromFile('c:\okul otomasyon\server\server log.txt');
end;

procedure TForm1.sss2Click(Sender: TObject);
begin
form7.show;
end;

procedure TForm1.RzBitBtn3Click(Sender: TObject);
begin
form8.show;
end;

end.

                                        YEMEK LİSTESİNİ YAZILACAGI FORM

Vt table kullanarak bağlayın  fazla bir uraşa gerek yok



KULLANI EKLİYECEGİMİZ FORM
Form tasarımı size kalmış isdediginiz gibi tasarlayın  resimleri gösterme amacım vt neler olacağını göstermek



GENEL MESAJLAR FORMU
Genel mesajların yazılacagı yer client de genel mesaj ata bilir mesajlar bu kısımda kayıt olur
Yayınla buttonu yenile anlamı taşıyor



     ÖZEL MESAJLAR KISMI
Özel mesajlaşma bölümü mesajlar buraya kaydedilir işin güzel yanı serverin başındaki kişi
Bütün mesajlaşmaları okuya bilir aslında bu kısmı tcp kullanrak yapacaktım ama okuldaki hup mesajları buloke ediyordu



CLİENT BÖLÜMÜ İŞİN ZOR KISMI



kulanıcı adı şifre form 2 ye ayarladım istiyen direk ama forma monte edebilir
:

procedure TForm1.sToolButton1Click(Sender: TObject);
var
s:string;
begin
   IdTCPClient1.Host:=form2.sedit1.Text;
   IdTCPClient1.Port:=1111;
   Idtcpclient1.Connect;
   s:=Idtcpclient1.ReadLn;
 
  if s='kulanıcı.adı:' then
Idtcpclient1.WriteLn(form2.sedit2.Text);
s:=Idtcpclient1.ReadLn;
if s='ŞİFRE:' THEN
Idtcpclient1.WriteLn(form2.sEdit3.Text);
if s='hata:'then
begin
showmessage(Idtcpclient1.ReadLn);
Idtcpclient1.Disconnect;
sstatusbar1.Panels[0].Text:='bir hata oluştu';
end
else
begin
s:=Idtcpclient1.ReadLn;
if s='şifre kabul edildi' then
begin
stoolbutton2.Enabled:=true;
stoolbutton3.Enabled:=true;
stoolbutton4.Enabled:=true;
stoolbutton5.Enabled:=true;

end;
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
slistview1.Hide;
stoolbutton2.Enabled:=false;
stoolbutton3.Enabled:=false;
stoolbutton4.Enabled:=false;
stoolbutton5.Enabled:=false;
end;

procedure TForm1.sToolButton3Click(Sender: TObject);
begin
form2.Show;
end;

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
sstatusbar1.Panels[0].Text:='baglantı saglandı';
end;

procedure TForm1.sToolButton2Click(Sender: TObject);
begin
sstatusbar1.Panels[0].Text:='bağlantı kesildi';
end;

procedure TForm1.sToolButton5Click(Sender: TObject);
var
kulanici:string;
begin

  slistview1.Show;
  slistview1.Clear;
kulanici:='';
  IdTCPClient1.WriteLn('liste');
   if  Idtcpclient1.ReadLn='liste:' then
 begin
while kulanici<>'liste sonu:' do
begin
kulanici:=IdTCPClient1.ReadLn;
if kulanici='liste sonu:' then break;
with slistview1.Items.Add DO

 begin
caption :=kulanici;
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);
kulanici:=Idtcpclient1.ReadLn;
subItems.Add(kulanici);

end;
end;

end;
    end;
procedure TForm1.genelmesajlar1Click(Sender: TObject);
begin
form3.show;
end;


                                                       FORM 2   YAPISI
Kulanı adı ip şifre ayarlarını yazdımız yar ben bilgileri direk olarak registriy yazdırdım



:

procedure TForm2.sBitBtn4Click(Sender: TObject);
begin
form2.Close;
end;

procedure TForm2.sBitBtn3Click(Sender: TObject);
begin

end;

procedure TForm2.FormCreate(Sender: TObject);
var
reg:tregistry;
SSS:string;
// ayarları form acılışında okuyoruz
begin
reg:=tregistry.Create;

try
reg.OpenKey('intO\ayarlar',false);
anahtar:='intO\ayarlar' ;
if reg.OpenKey(anahtar,false) then
begin
Sedit1.Text:=reg.ReadString('ip') ;
Sedit2.Text:=reg.ReadString('kullanı nick') ;
Sedit3.Text:=reg.ReadString('sifre ') ;
   reg.CloseKey;
end;
finally
reg.Free;

end;
end;
procedure TForm2.sBitBtn2Click(Sender: TObject);
begin
  form2.Close;
end;

procedure TForm2.sBitBtn1Click(Sender: TObject);
var
reg:tregistry;
tar:string;
     // yapılkan ayarları uygulatıyoruz  uygular
begin
reg:=tregistry.Create;
reg.OpenKey('into\ayarlar',true);
tar:='into\ayarlar' ;
try
if reg.OpenKey(tar,true)then
begin
reg.WriteString('ip',sedit1.Text);
reg.WriteString('kullanı nick',sedit2.Text);
reg.WriteString('sifre',sedit3.Text);

reg.CloseKey;
end;
finally
reg.Free;
end;


 GENEL MESAJ ATMA FORMU



genel mesaj al foksiyonu serverde kayıtlı mesajları alır eyer siz bir mesaj yazarsanız servere kaydeder ve başkalır anında okuya bilir

:
procedure TForm3.sBitBtn3Click(Sender: TObject);
begin
form3.Close;
end;

procedure TForm3.sBitBtn1Click(Sender: TObject);
var
kulanici:string;
begin

  form1.IdTCPClient1.WriteLn('genelmesaj');
  kulanici:=form1.idtcpclient1.ReadLn;
   smemo1.Lines.Add(kulanici);
    kulanici:=form1.idtcpclient1.ReadLn;
   sedit1.Text:=(kulanici);
    kulanici:=form1.idtcpclient1.ReadLn;
   sedit2.Text:=(kulanici);
    kulanici:=form1.idtcpclient1.ReadLn;
   sedit3.Text:=(kulanici);
    kulanici:=form1.idtcpclient1.ReadLn;
   smemo1.Lines.Add(kulanici);
    end;
procedure TForm3.sBitBtn2Click(Sender: TObject);
begin
sedit2.Text:=form2.sEdit2.Text;
sedit1.Enabled:=true;

sedit3.Enabled:=true;
smemo1.Enabled:=true;

end;

procedure TForm3.FormCreate(Sender: TObject);
begin
sedit1.Enabled:=false;
sedit2.Enabled:=false;
sedit3.Enabled:=false;
smemo1.Enabled:=false;
end;

procedure TForm3.sBitBtn4Click(Sender: TObject);
var
kulanici:string;
begin
form1.IdTCPClient1.WriteLn('genelmesajyaz');
form1.idtcpclient1.WriteLn(sedit1.Text);
form1.idtcpclient1.WriteLn(sedit2.Text);
form1.idtcpclient1.WriteLn(sedit3.Text);
form1.idtcpclient1.WriteLn(smemo1.Text);

end;

end.


                          Şimdilik bukadar başka bir konuda görüşmek üzere
Ynt: Indy Bileşenleri 2 Gönderen: mrblackman Tarih: 18 July 2006 17:57:46
hoca halt etmiş az not verip... bulmuş da bunuyor bence... Smile
teşekkürler bilgiler icin...
Ynt: Indy Bileşenleri 2 Gönderen: xbarakuda Tarih: 19 July 2006 14:38:40
evet yalvar yakar gecmiştik o dersten ve sınıfta tek calışan projeydi bu (benden başka delphiyle uraşan yoktu)  linüxcü bir arkadaşımla bunu birazdaha geliştirip linüx için derlicegiz
Ynt: Indy Bileşenleri 2 Gönderen: vectorman Tarih: 21 February 2007 13:26:42
hocam çok güzel bir proje.ah zamanım olsa ben de uğraşacağım. biraz rahatsalam Sad teşekkürler. eklediğin için.
Ynt: Indy Bileşenleri 2 Gönderen: teknolok Tarih: 21 February 2007 16:19:12
projeyi oldugu gibi koymak isdedim ama silinmiş gitmiş arkadaşlar Sad belki işinize yardı gerci kodları var eski bir proje ama tcp işiyle uraşmak istiyenlere iyi bir kaynak ola bilir
Ynt: Indy Bileşenleri 2 Gönderen: savas_kayaalp Tarih: 04 August 2007 12:44:52
s.a
teknolok makale için teşekkürler
bendede buna benzer bir döküman vardı aynı şekilde derledim 127.0.0.1 adresinle kendi kendime baglanım
bir kaç işlem yaptım ancak başka bir pc ile bu baglantı gercekleşmiyor bunun sebebi nedendir acaba
Ynt: Indy Bileşenleri 2 Gönderen: teknolok Tarih: 06 August 2007 14:43:59
127.0.0.1  senin pc adresi yani ağ kuruluysa bu ip vermesin sen yanlış ip yazıyorsundur büyük ihtimal
Ynt: Indy Bileşenleri 2 Gönderen: savas_kayaalp Tarih: 06 August 2007 19:35:56
127.0.0.1 bunu vermedim www.showip.com dan ip adresimi ögrendim ve onun üzerinden baglanmaya çalıştım bilmiyorum dogrumu yaptım ama sorun benim rounterin arkasında kalmamışmış bir kaç kişiyle konuşmam sonucunda böle bi netice çıktı port yönlendirme yapmak gerekiyormuş nette zoom x5 için port yönlendirmeye baktım denedim ve bir kaç porttu actım ancak sorun gene aynı bir arkadaşta ip adresin 192 ile başlıyorsa agın içindesin demişti eger öle degilse baglanamasıın diye biraz inceledim benim ki 172 ile başlıyordu tabi bir kaç denememe ragmen bi degişiklik olmadı  aslında ben sorunun nerden kaynaklandıgını  anlamadım ne oldugunu anlasam öle böle cözicem yanıt için teşekürler teknolok