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 KODUvar
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...

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

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

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