Örnek

İstemci ve Sunucu Arasında Sürekli Açık Kalan Socket Örneği

Java'da istemci ve sunucu arasında sürekli açık kalacak bir socket yaratılıp, o socket üzerinde veri alış verişi yapılabilir . Aşağıdaki sınıf bir client socket'i ile input ve output stream açmaktadır. Veri geldiği sürece inputstream'den okur ve outputstrem'e yazar : code:/java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; public class RequestHandler extends Thread{ private Socket socket; public RequestHandler(Socket socket) { this.socket=socket; } @Override public void run() { try { BufferedReader input = new BufferedReader( new InputStreamReader(socket.getInputStream())); PrintStream output = new PrintStream(socket.getOutputStream()); while(true) { String message = input.readLine(); if(message!=null) { System.out.println("Client message: " + message); output.println("Hello Client"); } } } catch (IOException e) { e.printStackTrace(); } } } code/: Bir portu dinleyen ve yeni bir istek geldiğinde bir socket ve RequestHandler yaratıp başlatan sınıf aşağıdaki gibidir : code:/java import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class PingServer extends Thread { private ServerSocket serverSocket = null; public TypeBPingServer(int port) throws IOException { serverSocket = new ServerSocket(port); } @Override public void run() { while (true) { try { System.out.println("wait..."); Socket socket = serverSocket.accept(); System.out.println("socket is accepted"); RequestHander requestHandler=new RequestHandler(socket); requestHandler.start(); } catch (IOException e) { e.printStackTrace(); } } } } code/: Yeni bir socket açıldığında RequestHandler yaratılır ve başlatılır. Artık o socket üzerinde veri alış verişini RequestHandler sınıfı yapar. Sunucu uygulaması aşağıdaki gibi yapılır ve çalıştırılır : code:/java import java.io.IOException; public class PingServerApplication { public satic void main(String[] args) throws IOException { int port=Integer.parseInt(args[0]); PingServer pingServer=new PingServer(port); pingServer.start(); } } code/: Uygulama sadece bir portu dinleyen PingServer'ı çalıştırır. Şimdi kullanıcı mesaj girdiği sürece sunucu ile veri alış verişi yapacak olan istemciyi yaratabiliriz. Kullanıcı quit yazdığında socket kapatılır ve uygulamadan çıkılır. code:/java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class PingClientApplication { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("localhost", 9091); Scanner scanner = new Scanner(System.in); while(!scanner.nextLine().equals("quit")) { PrintStream output = new PrintStream(s.getOutputStream()); output.println("Hello Server"); BufferedReader input = new BufferedReader( new InputStreamReader(s.getInputStream())); String response = input.readLine(); System.out.println("response : "+response); } scanner.close(); s.close(); } } code/: İstemci uygulaması 9091 portunda çalışan sunucu uygulamasına socket açar. Kullanıcı quit yazana kadar girdiği mesajlar sunucuya gönderilir. Önce sunucu çalıştırılır. Sunucu çalıştırıldığında ekranda wait .. yazısı gözükür ve bir istemcinin socket açmasını bekler. İstemci çalıştırıp, kullanıcı herhangi bir şey girdiğinde, örneğin a girsin, aşağıdaki gibi bir çıktı oluşur : pre:/output wait... socket is accepted wait... Client message: Hello Server pre/: İstemci uygulamasındaki çıktı ise : pre/: a response : Hello Client pre/: Kullanıcı bundan sonra quit dışında girildiği her şey de istemci veriyi sunucuya gönderir, sunucu da Hello Client cevabını verir.
zafer.teker , 22.03.2020

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir