# UDP mit Java



## BabyMitSchnully (20. Mai 2005)

Hi,

ich habe bereits ein wenig Netzwerkprogrammierung mit Java gemacht, doch immer nur mit TCP. Jetzt möchte ich gerne einen UDP Server und Client schreiben. Doch bin ich mir nicht ganz sicher wie dieser auszusehen hat. Ich weiß, dass es entsprechende Klassen dafür gibt doch was ist z.B ein Multicast? Kann mir jemand zeigen wie ein UDP-Server/Client auszusehen hat?

Gruß


----------



## Thomas Darimont (21. Mai 2005)

Hallo!

Schau mal hier:

Server:

```
/**
 * 
 */
package de.tutorials;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author Tom
 * 
 */
public class UDPServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		DatagramSocket datagramSocket = new DatagramSocket(9999);

		byte[] buffer = new byte[128];

		DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
		datagramSocket.receive(packet);

		int packetLen = packet.getLength();
		int offSet = packet.getOffset();
		byte[] packetContents = new byte[packetLen];
		System.arraycopy(buffer, offSet, packetContents, 0, packetLen);

		System.out.println("Received: " + new String(packetContents));

		String answer = "Foo" + System.currentTimeMillis();
		buffer = answer.getBytes();

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

		packet = new DatagramPacket(buffer, buffer.length);
		packet.setAddress(address);
		packet.setPort(port);

		System.out.println("Sending: " + answer + " to: " + address + " : "
				+ port);

		datagramSocket.send(packet);
	}
}
```

Client:

```
/**
 * 
 */
package de.tutorials;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author Tom
 * 
 */
public class UDPClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		DatagramSocket socket = new DatagramSocket();

		socket.connect(InetAddress.getLocalHost(), 9999);

		String data = "Hallo Welt!";
		byte[] buffer = data.getBytes();
		System.out.println("Send: " + data);
		socket.send(new DatagramPacket(buffer, buffer.length));

		DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
		socket.receive(packet);

		System.out.println("Received: " + new String(packet.getData()));

	}
}
```



> ...doch was ist z.B ein Multicast?



unter Multicast versteht man das Verfahren, dass viele Clients an einer speziellen Adresse horschen. Wird an diese Adresse eine Nachricht gesendet wird diese an alle Clients verteilt. 

Dazu gibt's beispielsweise unter Java die Klasse java.net.MulticastSocket
Siehe auch hier:
http://jan.netcomp.monash.edu.au/distjava/socket/lecture.html

Ein Opensource Projekt zum Thema verlässliche Multicast-Kommunikation gitb es mit JGroups auch:
http://www.jgroups.org/javagroupsnew/docs/index.html

Gruß Tom


----------



## BabyMitSchnully (23. Mai 2005)

Hey besten Dank. Genau das was ich gesucht habe.

Multicast funktioniert ebenso wie UDP?
ist die receive Methode ebenso ein blockierende Funktion wie socket.readLine()?

Ach ja. Ich bin dir sehr dankbar, dass du so oft so qualitativ hochwertige Antworten postest. Nur fehlt mir eines in deinen Codestücken. Die Kommentare zum besseren Verständis


----------

