Angewandte Netzwerktechnik kompakt

Material zum Buch

zu Kapitel 8.3 (Sender / Empfänger)


Für Kapitel 8.3 stehen uns die Klassen UDPReceiver und UDPSender zur Verfügung, mit denen Daten über UDP/IP ausgetauscht werden können.

UDPSender sendet im Sekundentakt ein Datagramm mit einem Integer-Wert an eine IP-Adresse und einen Port. UDPReceiver empfängt die Datagramme auf diesem Port.

zu Kapitel 8.3.3 (Broadcast)


Für Kapitel 8.3.3 stehen uns die Klassen UDPBroadcastReceiver und UDPBroadcastSender zur Verfügung, mit denen, Nachrichten von einem Sender an viele Empfänger gesendet werden können.

zu Kapitel 8.3.4 (Multicast)


Für Kapitel 8.3.4 stehen uns die Klassen UDPMulticastReceiver und UDPMulticastSender zur Verfügung, mit denen, Packete von einem Sender an Multicast-Adresse gesendet werden können.

Vorschau der Java-Klassen zu Kapitel 8.3


UDPReceiver.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class UDPReceiver {
	DatagramSocket udpSocket;
	byte[] bytePuffer;
	DatagramPacket udpPaket;

	public UDPReceiver(int meinPort) throws IOException {
		udpSocket = new DatagramSocket(meinPort); 
		System.out.println("Receiver Socket erzeugt");
		bytePuffer = new byte[10];
		udpPaket = new DatagramPacket(bytePuffer,bytePuffer.length);
		System.out.println("Receiver Datenpaket erzeugt");
	}

	public void tuWas() throws IOException {
		int zahl;

		do {
			udpSocket.receive(udpPaket);
			zahl = udpPaket.getData()[0];
			System.out.println("Receiver Empfangen: "+zahl + " insgesamt " + udpPaket.getLength() + " Bytes.");
		}
		while(true);
	}

	public void disconnect() throws IOException {
		udpSocket.close();
	}

	public static void main(String[] args) throws UnknownHostException, IOException {
		UDPReceiver meinReceiver = new UDPReceiver(4711);

		meinReceiver.tuWas();

		meinReceiver.disconnect();
	}
}

UDPSender.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class UDPSender {
	InetAddress seineAdresse;
	int seinPort;
	DatagramSocket udpSocket;
	byte[] bytePuffer;
	DatagramPacket udpPaket;

	public UDPSender(InetAddress seineAdresse, int seinPort) throws IOException {
		udpSocket = new DatagramSocket();
		System.out.println("Sender Socket erzeugt");
		bytePuffer = new byte[10]; 
		udpPaket = new DatagramPacket(bytePuffer,bytePuffer.length);
		System.out.println("Sender Datenpaket erzeugt");
		this.seineAdresse = seineAdresse;
		this.seinPort = seinPort;
	}

	public void tuWas(int startWert) throws IOException, InterruptedException {
		int zahl = startWert;

		do {
			byte [] data = new byte[1];
			data[0] = (byte)--zahl;
			udpPaket.setData(data);
			udpPaket.setLength(data.length);
			udpPaket.setPort(seinPort);
			udpPaket.setAddress(seineAdresse);
			udpSocket.send(udpPaket);
			System.out.println("Sender gesendet: "+zahl);
			Thread.sleep(1000);		
		}
		while(true);
	}

	public void disconnect() throws IOException {
		udpSocket.close();
	}

	public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
		UDPSender meinSender = new UDPSender(InetAddress.getByName("127.0.0.1"),4711);

		meinSender.tuWas(100);

		meinSender.disconnect();
	}
}

Vorschau der Java-Klassen zu Kapitel 8.3.3


UDPBroadcastReceiver.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.UnknownHostException;

public class UDPBroadcastReceiver {
	int broadcastPort;
	DatagramSocket broadcastSocket;
	byte[] bytePuffer;
	DatagramPacket udpPaket;

	public UDPBroadcastReceiver(int broadcastPort) throws IOException {
		
		broadcastSocket = new DatagramSocket(broadcastPort); 
		System.out.println("Receiver Socket erzeugt");
		
		bytePuffer = new byte[10];
		udpPaket = new DatagramPacket(bytePuffer,bytePuffer.length);
		System.out.println("Receiver Datenpaket erzeugt");
		this.broadcastPort = broadcastPort;
	}

	public void tuWas() throws IOException {
		int zahl;

		do {
			broadcastSocket.receive(udpPaket);
			zahl = udpPaket.getData()[0];
			System.out.println("Receiver Empfangen: "+zahl + " insgesamt " + udpPaket.getLength() + " Bytes.");
		}
		while(true);
	}

	public void disconnect() throws IOException {
		broadcastSocket.close();
	}

	public static void main(String[] args) throws UnknownHostException, IOException {
		UDPBroadcastReceiver meinEmpfaenger = new UDPBroadcastReceiver(4711);

		meinEmpfaenger.tuWas();

		meinEmpfaenger.disconnect();
	}
}

UDPBroadcastSender.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class UDPBroadcastSender {
	InetAddress braodcastAdresse;
	int broadcastPort;
	DatagramSocket broadcastSocket;
	byte[] bytePuffer;
	DatagramPacket udpPaket;

	public UDPBroadcastSender(InetAddress broadcastAdresse, int broadcastPort) throws IOException {
		broadcastSocket = new DatagramSocket();
		System.out.println("Sender Socket erzeugt");
	
		bytePuffer = new byte[10]; 
		udpPaket = new DatagramPacket(bytePuffer,bytePuffer.length);
		System.out.println("Sender Datenpaket erzeugt");
		this.braodcastAdresse = broadcastAdresse;
		this.broadcastPort = broadcastPort;
	}

	public void tuWas(int startWert) throws IOException, InterruptedException {
		int zahl = startWert;

		do {
			byte [] data = new byte[1];
			data[0] = (byte)--zahl;
			udpPaket.setData(data);
			udpPaket.setLength(data.length);
			udpPaket.setPort(broadcastPort);
			udpPaket.setAddress(braodcastAdresse);
			broadcastSocket.send(udpPaket);
			System.out.println("Partner2 gesendet: " + zahl);
			Thread.sleep(1000);		
		}
		while(true);
	}

	public void disconnect() throws IOException {
		broadcastSocket.close();
	}

	public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
		UDPBroadcastSender meinSender = new UDPBroadcastSender(
				InetAddress.getByName("255.255.255.255"),4711); // alle Rechner innerhalb des Firmennetzes

		meinSender.tuWas(100);

		meinSender.disconnect();
	}
}

Vorschau der Java-Klassen zu Kapitel 8.3.4


UDPMulticastReceiver.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.UnknownHostException;

public class UDPMulticastReceiver {
	InetAddress multicastAdresse;
	int multicastPort;
	MulticastSocket multicastSocket;
	byte[] bytePuffer;
	DatagramPacket udpPaket;

	public UDPMulticastReceiver(InetAddress multicastAdresse, int multicastPort) throws IOException {
		multicastSocket = new MulticastSocket(multicastPort); 
		System.out.println("Receiver Socket erzeugt");
		
		// Der Socket muss an ein Netzwerkinterface gebunden werden
		// Unter Windows ist das sowas wie "eth0"; unter OS X  "en0"; unter Linux "eth0"
		multicastSocket.setNetworkInterface(NetworkInterface.getByName("en0"));
		System.out.println(multicastSocket.getNetworkInterface());
		
		multicastSocket.joinGroup(multicastAdresse);

		bytePuffer = new byte[10];
		udpPaket = new DatagramPacket(bytePuffer,bytePuffer.length);
		System.out.println("Receiver Datenpaket erzeugt");
		this.multicastAdresse = multicastAdresse;
		this.multicastPort = multicastPort;
	}

	public void tuWas() throws IOException {
		int zahl;

		do {
			multicastSocket.receive(udpPaket);
			zahl = udpPaket.getData()[0];
			System.out.println("Receiver Empfangen: "+zahl + " insgesamt " + udpPaket.getLength() + " Bytes.");
		}
		while(true);
	}

	public void disconnect() throws IOException {
		multicastSocket.close();
	}

	public static void main(String[] args) throws UnknownHostException, IOException {
		UDPMulticastReceiver meinEmpfaenger = new UDPMulticastReceiver(InetAddress.getByName("224.255.255.255"),4711);

		meinEmpfaenger.tuWas();

		meinEmpfaenger.disconnect();
	}
}

UDPMulticastSender.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

public class UDPMulticastSender {
	InetAddress multicastAdresse;
	int multicastPort;
	MulticastSocket multicastSocket;
	byte[] bytePuffer;
	DatagramPacket udpPaket;

	public UDPMulticastSender(InetAddress multicastAdresse, int multicastPort) throws IOException {
		multicastSocket = new MulticastSocket();
		System.out.println("Sender Socket erzeugt");

		bytePuffer = new byte[10]; 
		udpPaket = new DatagramPacket(bytePuffer,bytePuffer.length);
		System.out.println("Sender Datenpaket erzeugt");
		this.multicastAdresse = multicastAdresse;
		this.multicastPort = multicastPort;
	}

	public void tuWas(int startWert) throws IOException, InterruptedException {
		int zahl = startWert;

		do {
			byte [] data = new byte[1];
			data[0] = (byte)--zahl;
			udpPaket.setData(data);
			udpPaket.setLength(data.length);
			udpPaket.setPort(multicastPort);
			udpPaket.setAddress(multicastAdresse);
			multicastSocket.send(udpPaket);
			System.out.println("Partner2 gesendet: " + zahl);
			Thread.sleep(1000);		
		}
		while(true);
	}

	public void disconnect() throws IOException {
		multicastSocket.close();
	}

	public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
		UDPMulticastSender meinSender = new UDPMulticastSender(InetAddress.getByName("224.255.255.255"),4711);

		meinSender.tuWas(100);

		meinSender.disconnect();
	}
}