# Größe von DatagramPacket



## jupp2 (26. Nov 2013)

Hallo zusammen,

folgendes Problem hatte ich schon öfter. Ich möchte eine Information von Server x zu Client y schicken. Dies soll hier mit UDP passieren. Daher nutze ich DatagramPackets. 

Angenommen die Information ist ein int. Dann macht der Server etwa folgendes:


```
byte[] myIntBytes = fileSizeConverter.putInt(myIntVariable).array();
DatagramPacket packet = new DatagramPacket(myIntBytes, myIntBytes.length, address, port);
socket.send(packet);
```

Auf Clientseite steht nun folgendes:


```
clientSocket.receive(pac);
```

Doch wie definiere ich pac genau? Der Konstruktor von DataGramm möchte ein byte Array und dessen Länge haben. Doch was muss ich machen, wenn ich die Größe der angegebenen Daten nicht genau kenne. Gibt es da einen eleganten weg oder bleibt mir nichts anderes übrig, als in die Nutzdaten diese Informationen mit reinzuschreiben?

Vielen Dank und viele Grüße


----------



## rme (26. Nov 2013)

Eigentlich bekommt die receive-Methode bei DatagramSockets als Parameter ein DatagramPacket, dessen Konstruktor die _maximale_ Größe der erwarteten Daten enthält: "This method blocks until a datagram is received. The length field of the datagram packet object contains the length of the received message. If the message is longer than the packet's length, the message is truncated. "


----------



## jupp2 (26. Nov 2013)

Aber so wirklich hilft mir das nicht weiter. Soll ich etwa auf gut Glück ein riesiges Byte-Array anlegen? Das wäre doch irgendwie doof. Ich frage mich eher, ob ich nicht alles direkt in einen Buffer schreiben kann....aber das geht wohl irgendwie nicht...weil der wird ja nicht verschickt


----------



## rme (26. Nov 2013)

Bei UDP ist es so, dass ein Paket immer als ganzes ankommt oder gar nicht ankommt. Du musst also tatsächlich die Maximalgröße anlegen, die dein Protokoll verwendet.


----------

