26 Nisan 2018 Perşembe

DatagramPacket Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.net.DatagramPacket;
Datagram'ın açıklaması şöyle. Datagram frame ve packet'ten farklı anlama geldiği için sınıfın işlevine tam olarak uyuyor.
A self-contained, independent entity of data carrying sufficient information to be routed from the source to the destination computer without reliance on earlier exchanges between this source and destination computer and the transporting network.
constructor - data
Veri okumak için kullanılır. Şöyle yaparız.
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
constructor - data + ip + port
Veri göndermek için kullanılır. 
Örnek
Şöyle yaparız.
DatagramPacket packet = new DatagramPacket(buf,buf.length,
                   InetAddress.getByName("192.168.1.5"), 4567);
Örnek
Şöyle yaparız.
public String message = ...;
InetAddress group = InetAddress.getByName("228.5.6.7");
DatagramPacket hi = new DatagramPacket(message.getBytes(), message.length(),
  group, 6789);
getAddress metodu
Okuma işleminden sonra paketin hangi adresten geldiğini bulmak için şöyle yaparız.
DatagramPacket packet =...
udpSocket.receive(receivePacket);

InetAddress ipAddress = packet.getAddress();
int port = packet.getPort();
getData metodu
Okunan veriyi döner. Şöyle yaparız.
DatagramPacket packet = new DatagramPacket(buf, buf.length);   
udpSocket.receive(packet); 
new String(packet.getData(), 0, packet.getLength())); 
Şöyle de yapabiliriz.
new String(packet.getData());
getLength metodu
Okuma işleminden sonra ne kadar veri okunduğunu belirtir.
receivePacket.getLength()
getPort metodu
Okuma işleminden sonra paketin hangi porttan geldiğini bulmak için şöyle yaparız.
DatagramPacket packet =...
udpSocket.receive(receivePacket);

InetAddress ipAddress = packet.getAddress();
int port = packet.getPort();

setLength metodu
Okuma işleminden sonra nesnenin okuyabileceği veri büyüklüğünü tekrar atamak gerekir. Şöyle yaparız.
byte[] b = new byte[BUFFER_LENGTH];
DatagramPacket dgram = new DatagramPacket(b, b.length);

while(true) {
  socket.receive(dgram); // blocks until a datagram is received
  System.err.println("Received " + dgram.getLength() +
    " bytes from " + dgram.getAddress());
  dgram.setLength(b.length); // must reset length field!
}


Hiç yorum yok:

Yorum Gönder