logo

Java Soket Programlama

Java Soket programlama, farklı JRE üzerinde çalışan uygulamalar arasındaki iletişim için kullanılır.

Java Soket programlama bağlantı odaklı veya bağlantısız olabilir.

Bağlantı yönelimli soket programlama için Socket ve ServerSocket sınıfları, bağlantısız soket programlama için DatagramSocket ve DatagramPacket sınıfları kullanılır.

Soket programlamada istemcinin iki bilgiyi bilmesi gerekir:

  1. Sunucunun IP Adresi ve
  2. Port numarası.

Burada tek yönlü istemci ve sunucu iletişimi yapacağız. Bu uygulamada istemci sunucuya bir mesaj gönderir, sunucu mesajı okur ve yazdırır. Burada iki sınıf kullanılıyor: Socket ve ServerSocket. Socket sınıfı istemci ve sunucu arasında iletişim kurmak için kullanılır. Bu sınıf sayesinde mesaj okuyup yazabiliyoruz. ServerSocket sınıfı sunucu tarafında kullanılır. ServerSocket sınıfının Accept() yöntemi, istemci bağlanana kadar konsolu engeller. İstemci başarılı bir şekilde bağlandıktan sonra sunucu tarafındaki Socket örneğini döndürür.

Java'da Soket Programlama

Soket sınıfı

Soket, makineler arasındaki iletişim için basit bir uç noktadır. Soket sınıfı, soket oluşturmak için kullanılabilir.

Önemli yöntemler

YöntemTanım
1) genel GirişStream getInputStream()bu yuvaya eklenen OutputStream'i döndürür.
2) genel OutputStream getOutputStream()bu yuvaya eklenen OutputStream'i döndürür.
3) genel senkronize void close()bu soketi kapatır

ServerSocket sınıfı

ServerSocket sınıfı bir sunucu soketi oluşturmak için kullanılabilir. Bu nesne istemcilerle iletişim kurmak için kullanılır.

Önemli yöntemler

YöntemTanım
1) genel Soket kabul etme()soketi döndürür ve sunucu ile istemci arasında bir bağlantı kurar.
2) genel senkronize void close()sunucu soketini kapatır.

Java Soket Programlama Örneği

Sunucu Oluşturma:

Sunucu uygulamasını oluşturmak için ServerSocket sınıfının örneğini oluşturmamız gerekiyor. Burada istemci ve sunucu arasındaki iletişim için 6666 port numarasını kullanıyoruz. Ayrıca başka herhangi bir bağlantı noktası numarasını da seçebilirsiniz. Accept() yöntemi istemciyi bekler. İstemciler verilen bağlantı noktası numarasıyla bağlanırsa, bir Soket örneğini döndürür.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

İstemci Oluşturma:

İstemci uygulamasını oluşturmak için Socket sınıfının örneğini oluşturmamız gerekir. Burada Sunucunun IP adresini veya ana bilgisayar adını ve bir port numarasını aktarmamız gerekiyor. Sunucumuz aynı sistem üzerinde çalıştığı için burada 'localhost' kullanıyoruz.

 Socket s=new Socket('localhost',6666); 

İstemcinin bir metin gönderdiği ve sunucunun bunu alıp yazdırdığı basit bir Java soket programlamasını görelim.

Dosya: MyServer.java

 import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } } 

Dosya: MyClient.java

 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 
bu örneği indir

Bu programı çalıştırmak için iki komut istemi açın ve her programı aşağıdaki şekilde gösterildiği gibi her komut isteminde çalıştırın.

İstemci uygulamasını çalıştırdıktan sonra sunucu konsolunda bir mesaj görüntülenecektir.

Java Ağ Programlama

Java Soket Programlama Örneği (Her iki tarafta Okuma-Yazma)

Bu örnekte, istemci önce sunucuya yazacak, ardından sunucu metni alıp yazdıracaktır. Daha sonra sunucu istemciye yazacak ve istemci metni alıp yazdıracaktır. Adım devam ediyor.

Dosya: MyServer.java

 import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }} 

Dosya: MyClient.java

 import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}