Bu Sayfayı Paylaş:

Örnek

Java'da Bir IP'nin Belirtilen IP Aralığı İçinde Olup Olmadığını Bulan Örnek

Aşağıdaki sınıf içindeki isInRange methodu verilen ip'nin kurucuda verilen başlangıç ve bitiş ip'si aralığında olup olmadığını döndürmektedir. Örnek kod aşağıdaki gibidir :
public class IPRange {
	private String start;
	private String end;
	
	public IPRange(String start,String end) {
		
		setStart(start);
		setEnd(end);
		
	}
	
	public String getStart() {
		return start;
	}
	
	private int getStartASInt() {
		return ipToInt(getStart());
	}
	
	public void setStart(String start) {
		this.start = start;
	}
	public String getEnd() {
		return end;
	}
	
	private int getEndASInt() {
		return ipToInt(getEnd());
	}
	
	public void setEnd(String end) {
		this.end = end;
	}
	
	public boolean isInRange(String aIP){
		
		int aIpInt=ipToInt(aIP);
		
		if(getStartASInt()<=aIpInt && aIpInt<=getEndASInt() ){
			
			return true;
			
		}
		
		return false;		
		
	}
	
	public int ipToInt(String ip){
		 int[] ip_parts  = new int[4]; 
		 int index = 0;
		 for(String s : ip.split("\\.")){
		    ip_parts[index++] = Integer.parseInt(s);
		 }
		 int final_ip = ip_parts[0] << 24 | ip_parts[1] << 16 | ip_parts[2] << 8 | ip_parts[3];
		 return final_ip;
	 }
	
	public static void main(String[] args) {
		
		IPRange range=new IPRange("141.196.0.1","141.196.255.254");
		System.out.println(range.isInRange("141.196.2.100"));
		System.out.println(range.isInRange("141.197.1.100"));
		System.out.println(range.isInRange("141.196.255.255"));
		System.out.println(range.isInRange("141.196.255.1"));
		
		
	}
	
}


Karşılaştırmadan önce ipToInt fonksiyonu IP'den sayı oluşturmaktadır. Sayıya çevirdikten sonra aralık içinde olup olmadığı kontrol edilmektedir. main içinde örnek kullanımı bulunmaktadır.

Örnek

HttpClient 4.1.2 Kütüphanesini Kullanarak HttpGet ile Bir URL Çağrılması ve String Olarak Cevabın Alınması

Aşağıdaki örnekte HttpClient kütüphanesi ile bir URL GET methodu ile çağrılmakta ve dönen response ekrana basılmaktadır.
DefaultHttpClient httpClient=new DefaultHttpClient();
HttpGet httpGet=new HttpGet(url);
ResponseHandler responseHandler = new BasicResponseHandler();
String responseBody = httpClient.execute(httpGet, responseHandler);
System.out.println("response : "+responseBody);
url değişkeni kodun yukarısında tanımlanmalıdır.

Örnek

HttpClient 4.2.1 Kütüphanesini Kullanarak HttpGet ile Bir URL Çağrılması ve String Olarak Cevabın Alınması

Aşağıdaki örnekte HttpClient kütüphanesi ile bir URL GET methodu ile çağrılmakta ve dönen response ekrana basılmaktadır.
public static String getOutput(String url) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet get = new HttpGet(url);
        try {
                HttpResponse response = httpclient.execute(get);
                if(response.getStatusLine().getStatusCode()==200){
                        HttpEntity responseEntity = response.getEntity();
                        return EntityUtils.toString(responseEntity);                
                }else{
                        return null;
                }            
        }catch (Exception ex) {
                ex.printStackTrace();
        }                
        return null;             
}

getOutput fonksiyonu bağlanılması gereke URL değerini almaktadır. Verilen URL'e GET method'u ile bağlanılmaktadır. Eğer GET sonucu server'dan 200 (başarılı) kodu dönerse cevap String olarak alınmaktadır. Aksi takdirde null döndürülmektedir.

İpucu

Bir Host Adresinden IP Numarası Ping İle Öğrenilebilir

Bir host adresinin IP'si , ping komutuyla öğrenilebilir. Örneğin www.fibiler.com adresine aşağıdaki gibi ping yapıldığında IP bilgisi alınmış olur:
>ping www.fibiler.com
 
Pinging fibiler.com [213.128.89.194] with 32 bytes of data:
 
Reply from 213.128.89.194: bytes=32 time=571ms TTL=56
Reply from 213.128.89.194: bytes=32 time=608ms TTL=56
Reply from 213.128.89.194: bytes=32 time=615ms TTL=56
Reply from 213.128.89.194: bytes=32 time=530ms TTL=56
 
Ping statistics for 213.128.89.194:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 530ms, Maximum = 615ms, Average = 581ms

İpucu

org.apache.http.client.HttpResponseException: Not Acceptable Hatası

HttpClient projesi ile bir sunucuyu çağrıldığında aşağıdaki gibi bir hata alınabilir :
org.apache.http.client.HttpResponseException: Not Acceptable
at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
Bu hata client'ın Http Header'a eklediği Accept ile sunucunun tanımladığı Accept header'ın birbirini tutmadığı anlamına gelir. Örneğin application/json kabul eden bir sunucu için aşağıdaki gibi set edilmelidir :
httpGet.setHeader("Accept", "application/json");

Bu şekilde yukarıdaki hata alınmaması gerekir.

Örnek

Socket ile Birbirini Selamlayan İstemci Sunucu Uygulaması

Başka bilgisayarlara hizmet eden bilgisayarlarda belirli port (kapı) numaraları belirli görevler için ayrılmıştır. Örneğin 80 port numarası HTTP protokolüne ayrılmıştır. Yukarıdaki URLConnection sınıfı 80 portu üzerinden bağlanmaktadır. Socket programlamada bir sunucu (server) ve birden fazla istemci (client) olabilir. Sunucu socket'i dinler ve kurulan socket'lere cevap verir. İstemci ise sunucuya socket açar ve bilgi alışverişinde bulunur. Aşağıda 5555 portunu dinleyen bir sunucu uygulaması ve bu porta bağlanan bir istemci örneği yapılmıştır. Client sunucuya selam gönderecek ve selam alacaktır. Bir socket açılır ve sonra program sonlanır.
 
// 5555 portunu dinleyen 
// bir server örneği
import java.net.*;
import java.io.*;
public class SocketServerTest {
  public static void main(String[] args){
    try{
      //5555 portunu dinleyen bir 
      // ServerSocket yaratıyoruz.
      ServerSocket ss=new ServerSocket(5555);   
      System.out.println("bekleniyor..");
      // Socket açıldığı zaman 
      // accept yöntemi çalışır.
      Socket s=ss.accept();
      System.out.println("socket açıldı.");
      InputStream is=s.getInputStream();
      InputStreamReader isr
          = new InputStreamReader(is);
      BufferedReader input 
          = new BufferedReader(isr);
      OutputStream os=s.getOutputStream();
      PrintStream output = new PrintStream(os);        
      String message = input.readLine();
      System.out.println(
          "Client mesajı: " + message);
      output.println("Merhaba Client");
      s.close();
    }catch (Exception e){
      e.printStackTrace();
    }
  }
}
Bu 5555 portuna bağlanan socket'leri dinleyen bir sunucu uygulamasıdır. ServerSocket (Sunucu Prizi) sınıfının accept() (ona) yöntemi sunucuda socket açılıp açılmadığını dinler. Açıldığı zaman size bir socket nesnesi gönderir. Artık bu nesne ile socket açan client ile iletişim kurabilirsiniz. Aynı socket nesnesi ile veri alabilir ve veri gönderebilirsiniz. Socket açıldıktan sonra getInputStream() (girdi akımını edin) ile veri okuma ve getOutputStream() (çıktı akımını edin) ile verilen stream ile veri yazma gerçekleştirebilirsiniz. Yukarıdaki sunucu kodunda istemciden gelen mesaj okunmuş ve istemciye cevap olarak "Merhaba Client" gönderilmiştir. Uygulama çalıştığında aşağıdaki bekleniyor mesajı yazıp bir socket açılmasını bekleyecektir.
bekleniyor..
İstemci kodu aşağıdaki gibidir.
// Server’a 5555 port'undan 

// bağlanan client örneği.
import java.net.*;
import java.io.*;
class SocketClientTest{   
  public static void main(String[] args){
    try{
      Socket s=new Socket("localhost",5555);        
      InputStream is=s.getInputStream();
      InputStreamReader isr
          = new InputStreamReader(is);
      BufferedReader input 
          = new BufferedReader(isr);
      OutputStream os=s.getOutputStream();
      PrintStream output = new PrintStream(os);
      output.println("Selam Server");
      String response = input.readLine();
    System.out.println(
        "Servet Gönderdiği Mesaj: " 
            + response);
    }catch(Exception e){
      e.printStackTrace();
    }

  }
}
İstemci ise bir socket nesnesi yaratır. Biz örnek olarak localhost kullandık. Ancak burası herhangi bir sunucu adı olabilir. Socket açtıktan sonra getInputStream() ile okuma ve getOutputStream() ile yazma gerçekleşebilir. Sunucuya "Selam Server" gönderilmekte ve sunucudan gelen mesaj ekrana basılmaktadır. Sunucu çalıştırılıp, İstemci de çalıştırılırsa sunucuda aşağıdaki çıktı oluşur.
bekleniyor..
socket açıldı.
Client mesajı: Selam Server
Client'ta ise 
Servet Gönderdiği Mesaj: Merhaba Client
şeklinde bir çıktı oluşur.

Ö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.



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