21 Mart 2018 Çarşamba

InetAddress Sınıfı - IPv4 veya IPv6 Adresi

Giriş
Şu satırı dahil ederiz.
import java.net.InetAddress;
Bu sınıf IPv4 veya IPv6 adresini temsil eder. C# dilindeki karşılığı IPAddress sınıfıdır.

InetAddress  vs InetSocketAddress 
Açıklaması şöyle
- An InetAddress corresponds to the Network Layer (Layer 3) and is basically an IP address.
- A InetSocketAddress corresponds to the Transport Layer (Layer 4) and consists of an IP address and a port number.

İstemci Socket
Bu sınıf istemci socket açmak için kullanılır. Şöyle yaparız
int SERVERPORT = 4000;
String SERVER_IP = "192.168.8.112";

InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
Socket socket = new Socket(serverAddr, SERVERPORT);      
Sunucu Socket
Bu sınıf sunucu socket açmak için kullanılır. 
Örnek
Şöyle yaparız.
int port = 31_003;
ServerSocket serverSocket = ServerSocketFactory.getDefault()
  .createServerSocket(port, 1, InetAddress.getLocalHost());
getAllByName metodu
İmzası şöyle
public static InetAddress[] getAllByName(String host)
getByName() kesinlikle kullanılmamalı. Bunun yerine getAllByName() kullanılmalı. Açıklaması şöyle
Avoid APIs that convert a hostname to a single IP address:
- java.net.Socket(String,int)
- java.net.InetSocketAddress(String,int)
- java.net.InetAddress.html#getByName(String)
Örnek - İstemci Socket
Şöyle yaparız
Socket doConnect(String hostname, int port) throws IOException {
  IOException exception = null;
  for (InetAddress address : InetAddress.getAllByName(hostname)) {
    try {
      return new Socket(address, port);
    } catch (IOException e) {
      if (exception == null) {
        exception = e;
      } else {
        exception.addSuppressed(e);
      }
    }
  }
  throw exception;
}
veya şöyle yaparız
Socket doConnect(String hostname, int port) throws IOException {
  IOException exception = null;
  for (InetAddress address : InetAddress.getAllByName(hostname)) {
    try {
      Socket s = new Socket();
      s.connect(new InetSocketAddress(address, port));
      return s;
    } catch (IOException e) {
      if (exception == null) {
        exception = e;
      } else {
        exception.addSuppressed(e);
      }
    }
  }
  throw exception;
}
getAddress metodu
Örnek
Şöyle yaparız. Byte dizisi 192,168,1,20 gibi değerler içerir.
byte[] octets = inetAddress().getAddress();
Örnek
Bir ağdaki tüm IP'leri dolaşmak için şöyle yaparız.
byte[] ip = InetAddress.getLocalHost().getAddress(); 

for (int i = 0; i < 255; i++) { 
  ip[3] = (byte)i; 
  InetAddress address = InetAddress.getByAddress(ip); 
  if (address.isReachable(1000))  { 
    System.out.println(address.getHostAddress()+"can be pinged with Name"+
                       InetAddress.getByAddress(ip).getHostName() );
  } 
}
getByAddress metodu
İmzası şöyle
public static InetAddress getByAddress(byte[] addr)
Örnek
Şöyle yaparız.
InetAddress inetAddress = InetAddress.getByAddress(new byte[] {127,0,0,1}));
Örnek
Bu sınıf sunucu socket açmak için kullanılır. Şöyle yaparız.
int port=31003;
ServerSocket socket = 
  new ServerSocket(port,0, InetAddress.getByAddress(new byte[] {127,0,0,1}));
Örnek
Şöyle yaparız.
int broadcast = ...;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
  quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
InetAddress inetAddress = InetAddress.getByAddress(quads);
getByAddress metodu
İmzası şöyle
public static InetAddress getByAddress(String host, byte[] addr)
Örnek ver

getByName metodu
İmzası şöyle
public static InetAddress getByName(String host)
Örnek - IP
IP ile çalışabilir. Şöyle yaparız.
InetAddress inetAddress = InetAddress.getByName("192.168.1.5");
Örnek - Sunucu İSmi
Gerekirse DNS sunucunu kullanır. Şöyle yaparız.
String url = "http://reddit.com";
InetAddress inetAddress = InetAddress.getByName(address);
getCanonicalHostName metodu
foo.example.com gibi bir çıktı verir.

getHostAddress metodu
Şöyle yaparız.
System.out.println("IP = " + inetAddress.getHostAddress());
getHostName metodu
Örnek ver.

getLocalHost metodu
Örnek
Şöyle yaparız. 192.168.1.2 gibi bir IP adresi döner.
InetAddress localIP = InetAddress.getLocalHost();
Aslında şu kodla aynı
InetAddress.getByName("localhost")
getLoopbackAddress metodu
Açıklaması şöyle
To resolve a loopback address, prefer InetAddress.getLoopbackAddress() over hard-coding an IPv4 or IPv6 loopback address with InetAddress.getByName("127.0.0.1") or InetAddress.getByName("::1").
isReachable metodu
Şöyle yaparız. Sanırım verilen adresi Ping'ler.
String ip ="172.20.1.";
if(InetAddress.getByName(host).isReachable(1000)) {...]


Hiç yorum yok:

Yorum Gönder