11-07-2017, Saat: 14:41
İ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.
Modem Üzerinden Port Açma
İlk olarak modem yani yönlendirici üzerinden nasıl port açabileceğimize bakalım.
İlk olarak nat seçeneğini bulup girelim;
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.
NOT: 1063 ben seçtim bunu değiştirebilirsiniz, tabi 80,21 gibi sayıları dışında.
Bu ayarlamaları yaptıktan sonra işlemimiz tamamlanmıştır. Şimdi Delphi'ye geçelim...
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.
Bu kodu sunucu aktifleştirme butonuna yazınız;
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;
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;
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.
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;
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;
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;
Bu kod ile de sunucumuzdan gelen mesajları görebiliriz.
Şimdi bu yazdığım adımları uyguladığımızda sonucu görelim..
Gördüğümüz gibi sağlıklı bir biçimde çalışıyor. İstediğiniz (İsterseniz Çin'de bile deneyin ) 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.
- Modem üzerinden port açmak.
- Server App oluşturmak.
- Client App oluşturmak.
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.
İlk olarak nat seçeneğini bulup girelim;
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.
NOT: 1063 ben seçtim bunu değiştirebilirsiniz, tabi 80,21 gibi sayıları dışında.
Bu ayarlamaları yaptıktan sonra işlemimiz tamamlanmıştır. Şimdi Delphi'ye geçelim...
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.
Bu kodu sunucu aktifleştirme butonuna yazınız;
ServerSocket.Port := 1063; ServerSocket.Active := True;
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.
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.
Şimdi bu yazdığım adımları uyguladığımızda sonucu görelim..
Gördüğümüz gibi sağlıklı bir biçimde çalışıyor. İstediğiniz (İsterseniz Çin'de bile deneyin ) 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.