Konuyu Paylaş : facebook gplus twitter

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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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ı Linkleri Görebilmeniz İçin Giriş yap veya Üye Ollinkinden 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.
May the force be with you!
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.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEmeğ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
May the force be with you!
Cevapla
#5
Eline sağlık, birde port olayı olmasaydı
Cevapla
#6
aylık 12 tl ye sanal sunucuları var Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olaylık 12 tl ye sanal sunucuları var Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEline 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.
May the force be with you!
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

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yeni cari takip programı yazacam admin02 19 1.238 22-07-2017, Saat: 20:26
Son Yorum: yhackup
  windows powershell pipe uzaktan yönetim masteryoda 2 488 10-05-2017, Saat: 17:21
Son Yorum: masteryoda



Konuyu Okuyanlar: 1 Ziyaretçi