Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Uzaktan Sohbet Programı Yapımı
#1
İyi günler sayın forum üyeleri, bugün elimden geldiğince şu herkesin takıldığı chatleşme yani sohbet aracı uygulamasını Delphi'de nasıl yapacağımızı anlatayım. Biliyorum ki yeni başlayanlarımız genelde local bölümde işi hallediyor lakin uzaktan bir IP adres ile bağlanmayı bir türlü beceremiyor. İlk olarak yapacağımız adımları anlatayım.

  1. Modem üzerinden port açmak.
  2. Server App oluşturmak.
  3. Client App oluşturmak.
 
Idea  Modem Üzerinden Port Açma

 İlk olarak modem yani yönlendirici üzerinden nasıl port açabileceğimize bakalım.
  • Varsayılan olan 192.168.1.1 adresinden yönlendirici login sayfasına gelin.
  • Kullanıcı adı ve şifresini girdikten sonra önünüze ana sayfa gelecektir.
  • Her modemde ayrı bir arayüz olduğu için kendi modem üzerinden gösterdiğimce, umarım anlaşılır olur.
Exclamation  Modem Marka: ZyXEL VMG3312-B10B


    İlk olarak nat seçeneğini bulup girelim;

aG1g4d.png


  Bu bölüme giriş yaptıktan sonra önümüze port yönlendirme ekranı gelecek. Yeni Kural butonuna tıklayıp resimdeki ayarları yapınız.

Exclamation  NOT: 1063 ben seçtim bunu değiştirebilirsiniz, tabi 80,21 gibi sayıları dışında.



aG1QZg.png




  Bu ayarlamaları yaptıktan sonra işlemimiz tamamlanmıştır. Şimdi Delphi'ye geçelim...


Idea  Server App Oluşturma

  Portumuzun tam olarak aktifleşmesi için bir server app oluşturmamız gerekecektir. Bu nedenle bize 1 adet ServerSocket bileşeni gerek.

NOT: Bileşeni olmayanlar Indy ile de işlemleri gerçekleştirebilirler, ama yine de eklemek isterseniz bu adımları izleyiniz.

Şimdi bizim port açma ve kullanma işimiz bitti, şimdi sohbet bölümüne geleceğiz. İlk olarak yapmamız gereken formumuza 1 adet edit 2 adet buton(Biri sunucu aktifleştirmesinde biri mesaj gönderiminde) ve 1 adet memo ekleyelim.

  Exclamation  Bu kodu sunucu aktifleştirme butonuna yazınız;

ServerSocket.Port := 1063;

ServerSocket.Active := True;

Exclamation Bu kodlar bizim portumuzun program üzerinden kullanılmasını sağlayacak, programı çalıştırdıktan sonra bu sitede port kontrolü yaparsanız açık olduğunu göreceksinizdir.

 Şimdi ise gelelim eğer bir Client'ten mesaj gelirse onu nasıl okuyacağımıza. OnClientRead olayına kodlarımızı yazalım;

procedure TServerApp.ServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Client Mesajı: '+Socket.ReceiveText);
end;

 Bu kod sayesinde yazıları okuyabiliriz. 


 Şimdi ise gelelim şu Client'lere mesaj atmaya. Tabi burda biraz algoritmik olarak düşünmemiz lazım. Çünkü kullanacağımız kodun yapısı tek bir Client'e mesaj gönderimi için uygun. Biz bunu biraz düzenleyelim.

 Mesaj için koyduğumuz butona şu kodları ekleyelim;

procedure TServerApp.Button2Click(Sender: TObject);
var
I: Integer;
begin
 for I := 0 to Server.Socket.ActiveConnections - 1 do
begin
Server.Socket.Connections[I].SendText(Edit1.Text);
end;

Memo1.Lines.Add('Mesajınız: '+Edit1.Text);
end;

 Bu for döngüsü ile tek tek bağlanan Client'lere mesajlarımızı gönderebiliriz. Şimdi Server ile işimiz bitti Client meselesine gelelim.


Idea  Client App Oluşturma

  Bu Client sayesinde sunucuya bağlanıp mesajlarımızı atabiliriz. Birden fazla Client ile çoklu görüşmeler yapılabilir. Formumuza bir adet ClientSocket bileşenini ekleyelim. Hemen sonrasında 3 adet edit (Biri sunucuIP biri sunucuPORT biri Mesaj bölümü olmak üzere) 1 memo ve 2 adet buton(Biri sunucuya bağlanma biri mesaj gönderme) ekleyelim.

Bir butonumuzun onClick olayına sunucuya bağlanma kodlarını yazalım;

procedure TformClient.Button2Click(Sender: TObject);
begin
ClientSocket1.Host := Edit2.Text;
ClientSocket1.Port := StrToInt(Edit3.Text);
ClientSocket1.Active := True;
end;

 Bunu halletikten sonra ise sunucuya mesaj gönderimini nasıl yapacağımıza bakalım. Mesaj gönderme butonumuzun OnClick olayına aşağıda ki kodları yazalım;

Client.Socket.SendText(Edit1.Text);

Memo1.Lines.Add('Mesajınız: '+Edit1.Text);

 Bu kodlar sayesinde sunucuya mesajımızı gönderebileceğiz. Pekiyi sunucudan gelen mesajı nasıl okuyacağız?

Bunun için ise ClientSocket'imizin onRead olayına şu kodları yazalım;

 
Memo1.Lines.Add('Sunucu Mesajı: '+Socket.ReceiveText);

Bu kod ile de sunucumuzdan gelen mesajları görebiliriz. 

Exclamation  Şimdi bu yazdığım adımları uyguladığımızda sonucu görelim..


4MGyJA.png


  Gördüğümüz gibi sağlıklı bir biçimde çalışıyor. İstediğiniz (İsterseniz Çin'de bile deneyin  Big Grin )   yerde mesajınız iletilecektir. 

Kaynak kodlarını GitHub linkinden bulabilirsiniz.

YENİ BAŞLAYANLAR İÇİN NOT:  ClientSocket ve ServerSocket isimlerini "Client" ve "Server" olarak kısalttım, bu yüzden kodlama yaparken "Client" ve "Server" olarak yazdım.


Saygılarımla,
İyi Çalışmalar.
kisisel_logo_dark.png
WWW
Cevapla
#2
Merhaba,
Değerli katkılarınızdan dolayı teşekkür ederim.
Belirtiğiniz alanda, Türkçe kaynak eksikliğini gidereceğine inanarak, benzer paylaşımlarınızın devamını bekliyoruz.
Cevapla
#3
Emeğinize sağlık, paylaşım için teşekkürler.

Bir de arada web sunucu olsa, port yönlendirmeden kurtulsak tadından yenmez  Wink
There's no place like 127.0.0.1
WWW
Cevapla
#4
(11-07-2017, Saat: 16:22)SimaWB Adlı Kullanıcıdan Alıntı: Emeğinize sağlık, paylaşım için teşekkürler.

Bir de arada web sunucu olsa, port yönlendirmeden kurtulsak tadından yenmez  Wink

  Hocam aslında UPnP meselesi var bir .pas dosyası ile otomatik port açıp yönlendirme yapabiliyoruz router üzerinden fakat sadece birkaç modem(benim modem'de sorunsuz) modelinde çalışıyor yani destekliyor, bu yüzden kendilerini pek sağlıklı görmüyorum desem yeridir.  Dodgy

Web sunucuda uçuk fiyatlar insanı çıldırtıyor şeytan diyor bilgisayarı server yap 7/24 çalışsın pc ama kıyamıyorum  Sad
kisisel_logo_dark.png
WWW
Cevapla
#5
Eline sağlık, birde port olayı olmasaydı
Cevapla
#6
aylık 12 tl ye sanal sunucuları var https://www.makdos.com/bulut/windows-sanal-sunucu/
test v.s işlemler için gayet uygun.

“Do. Or do not. There is no try.”
Cevapla
#7
(11-07-2017, Saat: 21:46)masteryoda Adlı Kullanıcıdan Alıntı: aylık 12 tl ye sanal sunucuları var https://www.makdos.com/bulut/windows-sanal-sunucu/
test v.s işlemler için gayet uygun.

  Cazip bir fiyat, alabilirim hocam. Teşekkürler  Shy

(11-07-2017, Saat: 21:41)dilo Adlı Kullanıcıdan Alıntı: Eline sağlık, birde port olayı olmasaydı

  UPnP denemeniz lazım o da her modem modeli için uygun değil, en iyisi bir sunucu gerek.
kisisel_logo_dark.png
WWW
Cevapla
#8
Sunucu kiralamak işin kolay kısmı Smile

Port yönlendirmeden kurtulmak için yapılması gereken orta katman uygulama Client ve Server'dan daha çok zamanınızı alabilir.

Bilmiyorum uğraşmayı düşünüyor musunuz ama düşünürseniz "hole punching"i araştırmalısınız.
Farklı yöntemler de var elbette. Mesela  "reverse ssh". Ama en yaygın kullanılanı "hole punching"tir.  

Gelişmeleri buradan paylaşırsanız seviniriz Wink
There's no place like 127.0.0.1
WWW
Cevapla
#9
(11-07-2017, Saat: 14:41)Halil Han BADEM Adlı Kullanıcıdan Alıntı: İyi günler sayın forum üyeleri, bugün elimden geldiğince şu herkesin takıldığı chatleşme yani sohbet aracı uygulamasını Delphi'de nasıl yapacağımızı anlatayım. Biliyorum ki yeni başlayanlarımız genelde local bölümde işi hallediyor lakin uzaktan bir IP adres ile bağlanmayı bir türlü beceremiyor. İlk olarak yapacağımız adımları anlatayım.

  1. Modem üzerinden port açmak.
  2. Server App oluşturmak.
  3. Client App oluşturmak.
 
Idea  Modem Üzerinden Port Açma

 İlk olarak modem yani yönlendirici üzerinden nasıl port açabileceğimize bakalım.
  • Varsayılan olan 192.168.1.1 adresinden yönlendirici login sayfasına gelin.
  • Kullanıcı adı ve şifresini girdikten sonra önünüze ana sayfa gelecektir.
  • Her modemde ayrı bir arayüz olduğu için kendi modem üzerinden gösterdiğimce, umarım anlaşılır olur.
Exclamation  Modem Marka: ZyXEL VMG3312-B10B


    İlk olarak nat seçeneğini bulup girelim;

aG1g4d.png


  Bu bölüme giriş yaptıktan sonra önümüze port yönlendirme ekranı gelecek. Yeni Kural butonuna tıklayıp resimdeki ayarları yapınız.

Exclamation  NOT: 1063 ben seçtim bunu değiştirebilirsiniz, tabi 80,21 gibi sayıları dışında.



aG1QZg.png




  Bu ayarlamaları yaptıktan sonra işlemimiz tamamlanmıştır. Şimdi Delphi'ye geçelim...


Idea  Server App Oluşturma

  Portumuzun tam olarak aktifleşmesi için bir server app oluşturmamız gerekecektir. Bu nedenle bize 1 adet ServerSocket bileşeni gerek.

NOT: Bileşeni olmayanlar Indy ile de işlemleri gerçekleştirebilirler, ama yine de eklemek isterseniz bu adımları izleyiniz.

Şimdi bizim port açma ve kullanma işimiz bitti, şimdi sohbet bölümüne geleceğiz. İlk olarak yapmamız gereken formumuza 1 adet edit 2 adet buton(Biri sunucu aktifleştirmesinde biri mesaj gönderiminde) ve 1 adet memo ekleyelim.

  Exclamation  Bu kodu sunucu aktifleştirme butonuna yazınız;

ServerSocket.Port := 1063;

ServerSocket.Active := True;

Exclamation Bu kodlar bizim portumuzun program üzerinden kullanılmasını sağlayacak, programı çalıştırdıktan sonra bu sitede port kontrolü yaparsanız açık olduğunu göreceksinizdir.

 Şimdi ise gelelim eğer bir Client'ten mesaj gelirse onu nasıl okuyacağımıza. OnClientRead olayına kodlarımızı yazalım;

procedure TServerApp.ServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Client Mesajı: '+Socket.ReceiveText);
end;

 Bu kod sayesinde yazıları okuyabiliriz. 


 Şimdi ise gelelim şu Client'lere mesaj atmaya. Tabi burda biraz algoritmik olarak düşünmemiz lazım. Çünkü kullanacağımız kodun yapısı tek bir Client'e mesaj gönderimi için uygun. Biz bunu biraz düzenleyelim.

 Mesaj için koyduğumuz butona şu kodları ekleyelim;

procedure TServerApp.Button2Click(Sender: TObject);
var
I: Integer;
begin
 for I := 0 to Server.Socket.ActiveConnections - 1 do
begin
Server.Socket.Connections[I].SendText(Edit1.Text);
end;

Memo1.Lines.Add('Mesajınız: '+Edit1.Text);
end;

 Bu for döngüsü ile tek tek bağlanan Client'lere mesajlarımızı gönderebiliriz. Şimdi Server ile işimiz bitti Client meselesine gelelim.


Idea  Client App Oluşturma

  Bu Client sayesinde sunucuya bağlanıp mesajlarımızı atabiliriz. Birden fazla Client ile çoklu görüşmeler yapılabilir. Formumuza bir adet ClientSocket bileşenini ekleyelim. Hemen sonrasında 3 adet edit (Biri sunucuIP biri sunucuPORT biri Mesaj bölümü olmak üzere) 1 memo ve 2 adet buton(Biri sunucuya bağlanma biri mesaj gönderme) ekleyelim.

Bir butonumuzun onClick olayına sunucuya bağlanma kodlarını yazalım;

procedure TformClient.Button2Click(Sender: TObject);
begin
ClientSocket1.Host := Edit2.Text;
ClientSocket1.Port := StrToInt(Edit3.Text);
ClientSocket1.Active := True;
end;

 Bunu halletikten sonra ise sunucuya mesaj gönderimini nasıl yapacağımıza bakalım. Mesaj gönderme butonumuzun OnClick olayına aşağıda ki kodları yazalım;

Client.Socket.SendText(Edit1.Text);

Memo1.Lines.Add('Mesajınız: '+Edit1.Text);

 Bu kodlar sayesinde sunucuya mesajımızı gönderebileceğiz. Pekiyi sunucudan gelen mesajı nasıl okuyacağız?

Bunun için ise ClientSocket'imizin onRead olayına şu kodları yazalım;

 
Memo1.Lines.Add('Sunucu Mesajı: '+Socket.ReceiveText);

Bu kod ile de sunucumuzdan gelen mesajları görebiliriz. 

Exclamation  Şimdi bu yazdığım adımları uyguladığımızda sonucu görelim..


4MGyJA.png


  Gördüğümüz gibi sağlıklı bir biçimde çalışıyor. İstediğiniz (İsterseniz Çin'de bile deneyin  Big Grin )   yerde mesajınız iletilecektir. 

Kaynak kodlarını GitHub linkinden bulabilirsiniz.

YENİ BAŞLAYANLAR İÇİN NOT:  ClientSocket ve ServerSocket isimlerini "Client" ve "Server" olarak kısalttım, bu yüzden kodlama yaparken "Client" ve "Server" olarak yazdım.


Saygılarımla,
İyi Çalışmalar.

Elinize Sağlık çok güzel bir çalışma olmuş, bu client i android e çevirmek istiyorum bunun kolay bir yolu var mıdır?
Cevapla
#10
(15-08-2023, Saat: 10:56)alitiras Adlı Kullanıcıdan Alıntı:
(11-07-2017, Saat: 14:41)Halil Han BADEM Adlı Kullanıcıdan Alıntı: İyi günler sayın forum üyeleri, bugün elimden geldiğince şu herkesin takıldığı chatleşme yani sohbet aracı uygulamasını Delphi'de nasıl yapacağımızı anlatayım. Biliyorum ki yeni başlayanlarımız genelde local bölümde işi hallediyor lakin uzaktan bir IP adres ile bağlanmayı bir türlü beceremiyor. İlk olarak yapacağımız adımları anlatayım.

  1. Modem üzerinden port açmak.
  2. Server App oluşturmak.
  3. Client App oluşturmak.
 
Idea  Modem Üzerinden Port Açma

 İlk olarak modem yani yönlendirici üzerinden nasıl port açabileceğimize bakalım.
  • Varsayılan olan 192.168.1.1 adresinden yönlendirici login sayfasına gelin.
  • Kullanıcı adı ve şifresini girdikten sonra önünüze ana sayfa gelecektir.
  • Her modemde ayrı bir arayüz olduğu için kendi modem üzerinden gösterdiğimce, umarım anlaşılır olur.
Exclamation  Modem Marka: ZyXEL VMG3312-B10B


    İlk olarak nat seçeneğini bulup girelim;

aG1g4d.png


  Bu bölüme giriş yaptıktan sonra önümüze port yönlendirme ekranı gelecek. Yeni Kural butonuna tıklayıp resimdeki ayarları yapınız.

Exclamation  NOT: 1063 ben seçtim bunu değiştirebilirsiniz, tabi 80,21 gibi sayıları dışında.



aG1QZg.png




  Bu ayarlamaları yaptıktan sonra işlemimiz tamamlanmıştır. Şimdi Delphi'ye geçelim...


Idea  Server App Oluşturma

  Portumuzun tam olarak aktifleşmesi için bir server app oluşturmamız gerekecektir. Bu nedenle bize 1 adet ServerSocket bileşeni gerek.

NOT: Bileşeni olmayanlar Indy ile de işlemleri gerçekleştirebilirler, ama yine de eklemek isterseniz bu adımları izleyiniz.

Şimdi bizim port açma ve kullanma işimiz bitti, şimdi sohbet bölümüne geleceğiz. İlk olarak yapmamız gereken formumuza 1 adet edit 2 adet buton(Biri sunucu aktifleştirmesinde biri mesaj gönderiminde) ve 1 adet memo ekleyelim.

  Exclamation  Bu kodu sunucu aktifleştirme butonuna yazınız;

ServerSocket.Port := 1063;

ServerSocket.Active := True;

Exclamation Bu kodlar bizim portumuzun program üzerinden kullanılmasını sağlayacak, programı çalıştırdıktan sonra bu sitede port kontrolü yaparsanız açık olduğunu göreceksinizdir.

 Şimdi ise gelelim eğer bir Client'ten mesaj gelirse onu nasıl okuyacağımıza. OnClientRead olayına kodlarımızı yazalım;

procedure TServerApp.ServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Client Mesajı: '+Socket.ReceiveText);
end;

 Bu kod sayesinde yazıları okuyabiliriz. 


 Şimdi ise gelelim şu Client'lere mesaj atmaya. Tabi burda biraz algoritmik olarak düşünmemiz lazım. Çünkü kullanacağımız kodun yapısı tek bir Client'e mesaj gönderimi için uygun. Biz bunu biraz düzenleyelim.

 Mesaj için koyduğumuz butona şu kodları ekleyelim;

procedure TServerApp.Button2Click(Sender: TObject);
var
I: Integer;
begin
 for I := 0 to Server.Socket.ActiveConnections - 1 do
begin
Server.Socket.Connections[I].SendText(Edit1.Text);
end;

Memo1.Lines.Add('Mesajınız: '+Edit1.Text);
end;

 Bu for döngüsü ile tek tek bağlanan Client'lere mesajlarımızı gönderebiliriz. Şimdi Server ile işimiz bitti Client meselesine gelelim.


Idea  Client App Oluşturma

  Bu Client sayesinde sunucuya bağlanıp mesajlarımızı atabiliriz. Birden fazla Client ile çoklu görüşmeler yapılabilir. Formumuza bir adet ClientSocket bileşenini ekleyelim. Hemen sonrasında 3 adet edit (Biri sunucuIP biri sunucuPORT biri Mesaj bölümü olmak üzere) 1 memo ve 2 adet buton(Biri sunucuya bağlanma biri mesaj gönderme) ekleyelim.

Bir butonumuzun onClick olayına sunucuya bağlanma kodlarını yazalım;

procedure TformClient.Button2Click(Sender: TObject);
begin
ClientSocket1.Host := Edit2.Text;
ClientSocket1.Port := StrToInt(Edit3.Text);
ClientSocket1.Active := True;
end;

 Bunu halletikten sonra ise sunucuya mesaj gönderimini nasıl yapacağımıza bakalım. Mesaj gönderme butonumuzun OnClick olayına aşağıda ki kodları yazalım;

Client.Socket.SendText(Edit1.Text);

Memo1.Lines.Add('Mesajınız: '+Edit1.Text);

 Bu kodlar sayesinde sunucuya mesajımızı gönderebileceğiz. Pekiyi sunucudan gelen mesajı nasıl okuyacağız?

Bunun için ise ClientSocket'imizin onRead olayına şu kodları yazalım;

 
Memo1.Lines.Add('Sunucu Mesajı: '+Socket.ReceiveText);

Bu kod ile de sunucumuzdan gelen mesajları görebiliriz. 

Exclamation  Şimdi bu yazdığım adımları uyguladığımızda sonucu görelim..


4MGyJA.png


  Gördüğümüz gibi sağlıklı bir biçimde çalışıyor. İstediğiniz (İsterseniz Çin'de bile deneyin  Big Grin )   yerde mesajınız iletilecektir. 

Kaynak kodlarını GitHub linkinden bulabilirsiniz.

YENİ BAŞLAYANLAR İÇİN NOT:  ClientSocket ve ServerSocket isimlerini "Client" ve "Server" olarak kısalttım, bu yüzden kodlama yaparken "Client" ve "Server" olarak yazdım.


Saygılarımla,
İyi Çalışmalar.

Elinize Sağlık çok güzel bir çalışma olmuş, bu client i android e çevirmek istiyorum bunun kolay bir yolu var mıdır?
Merhaba,

Indy bileşenleri ile ücretsiz yapabilirsiniz. 
Ya da aşağıdaki ücretli kaynağa göz atabilirsiniz. Sitesinde baktığımda FMX desteği bulunuyor.
https://blogs.embarcadero.com/example-we...plication/
kisisel_logo_dark.png
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Pazaryerleri Muhasebe Programı Entegrasyonu bünyamin68 2 245 22-02-2024, Saat: 15:51
Son Yorum: ahmet6513
  radio grup ile cevap anahtari yapimi. sadikacar60 2 227 31-01-2024, Saat: 13:22
Son Yorum: sadikacar60
  Borsa takip programı(Yeniyim) rumuztr@hotmail.com 8 755 29-12-2023, Saat: 17:36
Son Yorum: rumuztr@hotmail.com
  windows powershell pipe uzaktan yönetim masteryoda 4 3.465 28-05-2023, Saat: 05:31
Son Yorum: emozgun
  [ÇÖZÜLDÜ] Programı ikinci formdan başlatma sorunu? rmzgenius 3 752 25-04-2023, Saat: 13:20
Son Yorum: ozcanm



Konuyu Okuyanlar: 1 Ziyaretçi