Größe von DatagramPacket

jupp2

Mitglied
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:

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

Auf Clientseite steht nun folgendes:

Java:
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

Top Contributor
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. "
 
Zuletzt bearbeitet:

jupp2

Mitglied
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

Top Contributor
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.
 

Ähnliche Java Themen

Neue Themen


Oben