Java'da Soket Programlama: Kısa Bir Kılavuz
Yayınlanan: 2022-05-21Java'da soket programlama, programlar arasında iletişim kurmanın ve hem bağlantı yönelimli sunucular hem de bağlantı yönelimli olmayan sunucular olmak üzere farklı JRE'lere bağlı kalmanın bir yoludur. Java sunucu soketi, yalnızca bir sunucu ile bir istemci arasındaki iletişimi başlatmak ve işlemek için kullanılır.
Bu blog, soket programlama hakkında bilinmesi gereken her şeyi kapsayacaktır.
Java'da Soket Programlama
Soket programlama, ayrı ağ düğümlerini etkileşimli bir şekilde tamamlama ve kullanma sürecidir. Bir soketin (düğüm) bir IP adresindeki belirli bir portu dinlerken diğer soketin bağlandığı iki yönlü bir iletişim sistemidir.
Java'daki Soketler
Java'da soketler, ağ bağlantılı iki programı birbirine bağlayan iki yönlü iletişim kanalının bir ucudur. TCP katmanı, veri aktardığımız uygulamayı tanımlamak için verilen Java soketine bir bağlantı noktası numarası atamak için kullanılır. Bir uç nokta oluşturmak için bir IP adresi ve bir bağlantı noktası numarası kombinasyonunu kullanırız.
Java platformu, Java uygulamanız ile başka bir program arasında iki yönlü ağ bağlantısının bir tarafını uygulayan Socket adlı bir sınıf içerir. Sınıf, Java programınızı sisteme özgü ayrıntılardan koruyan, platformdan bağımsız bir uygulamanın üzerinde yer alır.
Java programlarınız, belirli bir yerel kod yerine sınıfı kullanarak, platformdan bağımsız bir şekilde ağ üzerinden iletişim kurabilir.
Ayrıca java.net, sunucuların istemcilerden gelen bağlantıları dinlemek ve kabul etmek için kullanabileceği bir soket uygulayan ServerSocket sınıfını içerir. Bu, ServerSocket sınıflarının ve Socket'in nasıl kullanılacağını gösteren bir örnektir.
İstemci tarafı bağlantı noktası ile sunucu tarafı bağlantı noktası arasında bir bağlantı oluşturulur.
Java Soket Bağlantısının Kurulması [İSTEMCİ TARAFI]
İstemci tarafı programlamaya devam etmeden önce, istemci sunucunun başlatılmasını beklemelidir. Bir kez kurulup çalıştırıldığında, Java sunucusuna sorgular göndermeye başlayacaktır. İstemci daha sonra sunucunun yanıtını bekleyecektir. Bu, istemci-sunucu bağlantı mantığının iyi bir özetidir.
İstemci tarafı programlamaya daha ayrıntılı bakalım.
Başka bir makineye bağlanmak için bir soket bağlantısına ihtiyacınız olacak. İki bilgisayar, ağ üzerinde nerede olduklarını (IP Adresi) ve bir soket bağlantısı kurmak için hangi TCP bağlantı noktasını kullandıklarını bilmelidir. Java.net çerçevesi, soket sınıfını belirtir.
Sunucunun IP adresi, ilk giriş argümanıdır. TCP Bağlantı Noktası burada bir sonraki parametredir. (Bir sunucuda hangi programın başlatılması gerektiğini söyleyen bir sayıdan başka bir şey değildir.) Örneğin HTTP, 80 numaralı bağlantı noktasını kullanır. Genellikle, bağlantı noktası numaralarının aralığı 0 ile 65535 arasındadır.
İletişim
Bir soket bağlantısı üzerinden iletişim kurarken veri girişi ve çıkışı için akışlar kullanılır. İstekleri gönderip güçlü bir bağlantı kurduktan sonra soket bağlantısını kapatmalısınız.
Java Sunucusu Soket Bağlantısını Kapatma
Sunucuya mesaj gönderildikten sonra soket bağlantısı açıkça kapatılır, soket bağlantısı açıkça kapatılır.
// Clientele için Demo Java programı
java.net'i içe aktar*;
java.io'yu içe aktar*;
genel sınıf Client_Side_Program
{
// soket akışlarını, giriş akışlarını ve çıkış akışlarını başlatmak için
özel Soket soketi = boş;
özel DataInputStream girişi = boş;
özel DataOutputStream çıkışı = null;
// TCP bağlantı noktasını ve IP adresini koyacak kurucu
public Client(Dize ekleme, int bağlantı noktası)
{
// bir bağlantı kurun
denemek
{
soket = yeni Soket(ekle, bağlantı noktası);
System.out.println(“Bağlı”);
// terminalden girdi alır
girdi = new DataInputStream(System.in);
// çıktıyı sokete gönderir
out = new DataOutputStream(socket.getOutputStream());
}
yakalamak(UnknownHostException u)
{
System.out.println(u);
}
yakalamak (IOException i)
{
System.out.println(i);
}
// girdiden gelen mesajı okumak için dize
Dize satırı = “”;
// “Over” girilene kadar okumaya devam et
while (!line.equals(“Üzeri”))
{
denemek
{
satır = input.readLine();
out.writeUTF(satır);
}
yakalamak (IOException i)
{
System.out.println(i);
}
}
// bağlantıyı kapat
denemek
{
girdi.kapat();
dışarı.kapat();
soket.close();
}
yakalamak (IOException i)
{
System.out.println(i);
}
}
public static void main(String args[])
{
İstemci istemci = yeni Müşteri(“127.0.0.1”, 5000);
}
}
Bu kodun kaynağını ziyaret etmek için burayı tıklayın .
Java Soket Bağlantısının Kurulması [SUNUCU YÖNÜ]
Sunucu nesnesini oluşturur ve Java sunucu soket tarafı bağlantısını göz önünde bulundurarak istemcinin isteğini bekler. İstek gönderildikten sonra sunucu istemci ile etkileşime geçecektir. Sunucu tarafı uygulamasını kodlamak için iki sokete ihtiyacınız olacak, bu aşağıdaki gibidir – bir istemci yeni bir Socket() oluşturduğunda, istemci isteklerini beklemek için bir ServerSocket oluşturulur. Basit bir soket, istemci ile sunucu tarafı iletişimi başlatan bir program olarak tanımlanabilir. Java sunucu tarafı soket bağlantısından raporu aldıktan sonra, yanıtları istemci ile buna göre iletebilirsiniz.
İletişim
Soketi çıktı göndermek için kullanmak için genellikle getOutputStream() yöntemini kullanmayı dört gözle bekliyoruz.
Java Sunucusu Soket Bağlantısını Kapatma
Hem soketi hem de giriş-çıkış akışlarını kapatarak bağlantıyı bitirmek çok önemlidir.
// Bir Sunucu java programı
java.net'i içe aktar*;
java.io'yu içe aktar*;
genel sınıf Sunucu
{
//soket ve giriş akışını başlat
özel Soket soketi = boş;
özel ServerSocket sunucusu = boş;
özel DataInputStream = null;
// portlu kurucu
genel Sunucu (int bağlantı noktası)
{
// bir sunucuyu başlattıktan sonra bağlantı bekler
denemek
{
server = new ServerSocket(port);
System.out.println(“Sunucu: başlatıldı”);
System.out.println(“Bir müşterinin gelmesini bekliyor…”);
soket = server.accept();
System.out.println(“Müşteri kabul edildi”);
// client soket girişi almak için
in = yeni DataInputStream(
yeni BufferedInputStream(socket.getInputStream()));
Dize satırı = “”;
// "Over" gönderilene kadar istemciden gelen mesajı okumak için
while (!line.equals(“Üzeri”))
{
denemek
{
satır = in.readUTF();
System.out.println(satır);
}
yakalamak (IOException i)
{
System.out.println(i);
}
}
System.out.println(“Bağlantı kapatılıyor”);
// yakın bağlantı
soket.close();
in.close();
}
yakalamak (IOException i)
{
System.out.println(i);
}
}
public static void main(String args[])
{
Sunucu sunucusu = yeni Sunucu (5000);
}
}
Bu kodun ayrıntılarını kontrol etmek için burayı tıklayın .
Hem istemci hem de sunucu uçlarını yapılandırdıktan sonra önce sunucu tarafı yazılımı çalıştırabilirsiniz. Ardından, istemci tarafı yazılımı çalıştırmalı ve isteği göndermelisiniz. İstemci tarafından istek geldiğinde sunucu hemen tepki verir.
Popüler Yazılım Mühendisliği Kurslarımızı keşfedin
SL. Numara | Yazılım Geliştirme Programları | |
1 | LJMU ve IIITB'den Bilgisayar Bilimleri Yüksek Lisansı | Caltech CTME Siber Güvenlik Sertifika Programı |
2 | Tam Yığın Geliştirme Eğitim Kampı | Blockchain'de PG Programı |
3 | Yazılım Geliştirmede Yönetici Yüksek Lisans Programı - DevOps'ta Uzmanlık | Tüm Yazılım Mühendisliği Kurslarını Görüntüle |
Terminal veya Komut İstemi Çalıştırma
Terminal veya Komut İstemi'ni başlatmak için aşağıdaki komutları kullanacağız. Başlangıç olarak, biri sunucu, diğeri istemci için ayrılmış iki pencere oluşturacağız.
- Sunucu programının çalışmaya başlamasına izin verin.
$ java Sunucusu
- Ardından, farklı bir terminalde İstemci uygulamasını şu şekilde başlatın:
java istemcisi $
Sunucu istemciyi kabul ettiğinde, yazılım “Bağlandı” ve “İstemci Kabul Edildi” mesajını gösterecektir.
- İstemci kutusunda, mesajları girmeye başlayabilirsiniz. İşte bir İstemci girişi örneği.
Merhaba! Bu benim ilk profesyonel soket bağlantımı işaret ediyor.
Sunucunun aynı anda aldığı ve gösterdiği
Merhaba! Bu benim ilk profesyonel soket bağlantımı işaret ediyor.
Üzerinde.
Kapanış bağlantısı
Daha önce belirtildiği gibi, “Over” göndermek, İstemci ile Sunucu arasındaki bağlantıyı sonlandırır.
Yazılım Geliştirme ile ilgili Popüler Makalelerimizi okuyun
Java'da Veri Soyutlama Nasıl Uygulanır? | Java'da İç Sınıf nedir? | Java Tanımlayıcıları: Tanım, Sözdizimi ve Örnekler |
OOPS'de Kapsüllemeyi Örneklerle Anlamak | C'deki Komut Satırı Argümanları Açıklaması | 2022'de Bulut Bilişimin En Önemli 10 Özelliği ve Özelliği |
Java'da Polimorfizm: Kavramlar, Türler, Karakteristikler ve Örnekler | Java'da Paketler ve Nasıl Kullanılır? | Yeni Başlayanlar İçin Git Eğitimi: Git'i Sıfırdan Öğrenin |
Çözüm
Java Socket programlama, yerel ve uzak istemci-sunucu uygulamaları arasında iletişim kurmak için soket API'lerini kullanarak ilerleyen önemli bir araçtır. Doğru soket programlama bilgisi, sunucu ve istemci bağlantılarını iyileştirebilir.
Java öğrenmek ve tam yığın geliştirmede uzmanlaşmak istiyorsanız, tam size göre yüksek etkili bir kursumuz var: upGrad'ın Yazılım Geliştirmede Yönetici PG Programı – Tam Yığın Geliştirmede Uzmanlaşma .
IIIT-B'nin 13 aylık programı, öğrencilerin Bilgisayar Biliminin Temelleri, Yazılım Geliştirme Süreçleri, Arka Uç API'leri ve Etkileşimli Web Kullanıcı Arayüzü gibi beceriler edinmelerine yardımcı olmak için tasarlanmıştır. Hem teknoloji dışı hem de yeni kodlayıcılar için programlama becerilerini geliştirmek için bir Yazılım Kariyer Geçişi Eğitim Kampına erişim ve upGrad'dan 360° kariyer desteği elde edersiniz.
Dünyanın En İyi Üniversitelerinden Online Yazılım Geliştirme Kursları öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.
Java soket programlamayı öğrenmenin faydaları nelerdir?
Soketler, ağ oluşturma açısından sohbet gibi bir istemci-sunucu uygulaması oluşturmak için kullanılabilir. Soketler, bir sistemin portlarının açık olup olmadığını, Nmap gibi standart port tarayıcı programlarının olup olmadığını ve düşük seviyede kullanılıp kullanılamayacağını keşfetmek için en temel güvenlik seviyesinde uygulanır. SSH - Secure Socket Shell komutunun bir ters kabuk aracılığıyla harici bir sunucuya bağlanmak için kullanılabileceği şekilde kullanılabilirler.
Kabul etme işlevi ne işe yarar?
Kabul etme işlevi, bir istemcinin bir argüman gelene kadar orada kalmasını engelleyerek sunucuya bağlanmasını bekler. Daha sonra soketten girdi almak için getInputStream işlevini kullanırız. Sunucu, Over komutu alınana kadar gönderilen mesajları kabul etmeye devam edecek şekilde tasarlanmıştır.
Ağ programlamasında neden iş parçacıkları kullanılır?
Aynı anda birkaç müşterinin katılmasını istiyoruz. Bu nedenle, her istemci isteğini farklı bir iş parçacığının işleyebilmesi için sunucu tarafında iş parçacıkları kullanmalıyız. Sunucuya aynı anda iki isteğin geldiği bir durumu varsayalım. Basit sunucu-istemci uygulamamızda aynı anda birden çok isteği işlemek için bir yöntem verilmediğinden, bir nanosaniye bile erken gelen istek sunucuya bağlanabilecek, diğer istek reddedilecektir.