# UDP Pakete empfangen ohne Programm zu blockieren



## theForm (11. Jul 2014)

Hallo,

ich bin hier neu hier und melde mich weil ich eine Frage habe zu der ich seit Tagen keine wirkliche Antwort finde.


Ich bin gerade an einem kleinen Projekt dran wobei es um folgendes geht:
Eine WLAN-Interface-Box sendet mir per WLAN die Daten von nem Feld-Bus als UDP-Pakete.
Diese will ich empfangen und anzeigen in einer GUI.

Soweit so gut, das Problem ist nur erstmal das eigentliche praktikable empfangen.

Nach längerem googeln habe ich folgendes gefunden:


```
try
			  {
				  DatagramSocket socket = new DatagramSocket( 5001 );
				

					  // Auf Anfrage warten
					  DatagramPacket packet = new DatagramPacket( new byte[1024], 1024 );
				      socket.receive( packet );
				      // Empfänger auslesen
				
				      InetAddress address = packet.getAddress();
				      int         port    = packet.getPort();
				      int         len     = packet.getLength();
				      byte[]      data    = packet.getData();
				
				      System.out.printf( "Anfrage von %s vom Port %d mit der Länge %d:%n%s%n",
				                         address, port, len, new String( data, 0, len ) );
				      //String result = new String( data, 0, len );
				      //return new String(data, 0, len);   
	

			  }
			  catch(IOException e2)
			  {
				  System.out.println("IOException");
				  System.out.println(e2);
			  }
```

Funktioniert auch wunderbar, ich schick was an Port 5001, wird mir angezeigt, alles bestens 

Nur wird eben das ganze Programm blockiert bis ein Paket ankommt, nur ist das nicht so richtig das Ziel was ich erreichen wollte.

Die GUI soll auch währenddessen bedienbar sein.
Was ich bereits herausgefunden habe ist dass ich wohl mit Threads arbeiten muss.

Ich habe in meinem Studium zwar bereits mit C# gerarbeitet, aber so richtig klar wass ich da machen muss ist mir noch nicht so ganz klar.

Hat jemand eine Idee nach was ich denn da so suchen kann?
Ich glaub ich such einfach immer nach dem falschen, kann mir nicht vorstellen dass sowas sonst niemand braucht.

In C# ist das wohl rel einfach, da definiert man einfach ne Funktion die bei nem ankommenden Paket aufgerufen wird und dann gehts von dort aus weiter.

Aber in Java muss man das wohl alles noch "händisch" lösen, nur hab ich noch kein wirklich Plan wie.


Über Tipps wär ich schon sehr dankbar 


Gruß
David


----------



## njans (11. Jul 2014)

Da musst du wohl den passenden Code in einen eigenen Thread auslagern.


----------



## theForm (11. Jul 2014)

Zubächst vielen Dank für deine Antwort.

Dass ich daraus einen extra Thread machen muss war mir schon klar, das hab ich bereits rausgefunden, die passende klasse habe ich auch bereits dazu gemacht:



```
public class UDPReceiver extends Thread
{
	  public void run()
	  {     	  	  
			  try
			  {
				  DatagramSocket socket = new DatagramSocket( 5001 );
				

					  // Auf Anfrage warten
					  DatagramPacket packet = new DatagramPacket( new byte[1024], 1024 );
				      socket.receive( packet );
				      // Empfänger auslesen
				
				      InetAddress address = packet.getAddress();
				      int         port    = packet.getPort();
				      int         len     = packet.getLength();
				      byte[]      data    = packet.getData();
				
				      System.out.printf( "Anfrage von %s vom Port %d mit der Länge %d:%n%s%n",
				                         address, port, len, new String( data, 0, len ) );
				      //String result = new String( data, 0, len );
				      //return new String(data, 0, len);   
	

			  }
			  catch(IOException e2)
			  {
				  System.out.println("IOException");
				  System.out.println(e2);
			  }			  
	  }
}
```

Das hab ich bereits kapiert
Nur was mach ich jetzt damit?

Wie muss ich das aufrufen? So dass nebenher auch noch was anderes gemacht werden kann?


----------



## VfL_Freak (11. Jul 2014)

Moin,



theForm hat gesagt.:


> Nur was mach ich jetzt damit?
> Wie muss ich das aufrufen? So dass nebenher auch noch was anderes gemacht werden kann?



Beispiele findest du etwa hier:
java - "implements Runnable" vs. "extends Thread" - Stack Overflow

Gruß
Klaus


----------

