# UDP-Paketverlust über localhost



## Lastlord (6. September 2010)

Hi ich habe ein UDPSocket, das (zu Testzwecken) Packete an seine eigene Adresse sendet.

Weil ich n paar Probleme hatte habe ich die send und retrieves gezählt und festgestellt, und festgestellt, dass nicht alles was abgesendet wurde auch angekommen ist. 

Ich meine klar, bei UDP gibt es keine Garantie, aber bei UDP über 127.0.0.1 auch nicht?

Ist euch das bekannt?


----------



## Lastlord (6. September 2010)

ach ja wie bin ich doch dekadent in meine Ansprüchen: naja hab eine Testklasse geschrieben, die
 dies klar macht:

```
class UDPTest {
	DatagramSocket datagram;
	DatagramPacket packet;
	InetAddress adress;

	public UDPTest( int messagecount ) throws IOException{
		adress = InetAddress.getByName( "127.0.0.1" );
		datagram = new DatagramSocket( 8009 , adress );
		packet = new DatagramPacket( new byte[1000] , 1000 , adress , 8009 );
		int i = 0;
		for ( ; i < messagecount ; i++ )
			datagram.send( packet );
		i = 1;
		while ( true ){
			datagram.receive( packet );
			System.out.println( "ret:" + i++ );
		}
	}
}
```

Klar wenn der interne Buffer auf welcher Ebene auch immer voll ist, werden Daten verworfen...
Wie das wohl bei TCP ist... da gibts bestimmt irgendeine Exception.
Wenn einer ergänzende Infos hat, dann ist das hier bestimmt der richtige Ort sie zu posten. Deshalb lass ich das Thema mal offen.


----------



## Bratkartoffel (7. September 2010)

Hallo,

wie du es bereits richtig vermutet hast, denke ich auch, dass da der Puffer zum empfangen überläuft. Du schickst erst alle Pakete los, bevor zu anfängst diese abzurufen. Pro Paket werden somit bei dir 1 KB fällig; Bei einem Puffer von sagen wir mal 512 KB ist dieser relativ schnell voll.

Probiere mal, das Empfangen als extra Thread auszulagern und lasse beides gleichzeitig laufen (Erst Empfänger starten, dann Sender) und schau ob du noch immer Verlust hast.

Gruß
BK


----------



## onlyfoo-na (7. September 2010)

Bei TCP wirds auch erstmal keine Exception geben, sondern der sende-Vorgang wird blocken, bis die Packete auf der Zielseite abgeholt sind. In deinem Fall gibts also vermutlich einen Deadlock.


----------

