DatagramPackets mit Offset schicken!

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi @ all!

Will folgendes machen:
Ich will ein Packet schicken, wo in den ersten 4 Stellen des buffers (sendData) die Sequenz-Nummer abgespeichert ist und an den nachfolgenden Stellen irgendwelche Daten.

Ich bekomme aber immer eine IllegalArgumentException. Es funktioniert nämlich nur wenn der Offest 0 ist. ABer wie soll dann der Empfänger wissen, wieviel Stellen er rausparsen muss, damit er die Seq-Nummer erhält?!!

Unten die Problemzeile mit den Werten beim Aufruf darüber.


Code:
//new DatagramPacket(buffergröße = 1024, offset = 4, länge = 24, localhost, 3788);
sendPacket = new DatagramPacket(sendData, 4, datalength, clientAddress, port);
 

Grizzly

Top Contributor
Ich verstehe leider nicht ganz, wie Du das meinst. Der von Dir verwendete Konstruktor erzeugt - wenn ich die API richtig verstanden habe - ein DatagramPacket mit den Daten aus dem Array, beginnend am Offset mit der angegebenen Länge. Außerdem wird das DatagramPacket mit einer Ziel-Adresse und einem Ziel-Port versehen.

Du kannst die Sequenz-Nummer doch einfach in die ersten 4 Bytes Deines Arrays unterbringen. Mit dem Offset musst Du eigentlich gar nix machen. Die Gegenstelle bzw. der Empfänger muss dann halt wieder die ersten 4 Bytes als Sequenznummer interpretieren.
 
G

Guest

Gast
Aso, hab da anders gedacht. Hab gemeint, dass der Offset so eine Art Markierung für den Empfänger ist.

So dass der Empfänger weiß, dass im buffer 2 Sachen drin sind.
 
G

Guest

Gast
Hab noch eine Fragen:

Wie ist das dann mit dem length-Attribut.
Die Java-Api sagt das: The length argument must be less than or equal to buf.length.


Wenn ich jetzt ein byte[] mit Größe 1024 in das Paket reinstecke und length auf 800 setze, schickt der Sender dann die kompletten 1024 bytes rüber? 800 sinnvolle bytes und die restlichen 224 sind dann irgendein byte-Müll. Der Empfänger kann dann mit DatagramPacket.getLength() abfragen, wie viel sinnvolle bytes geschrieben wurden, also 800. So hab ich mir's vorgestellt.

Oder verkleinert der Sender das byte[] auf 800, bevor ers wegschickt?
 

Grizzly

Top Contributor
Anonymous hat gesagt.:
[...]Wenn ich jetzt ein byte[] mit Größe 1024 in das Paket reinstecke und length auf 800 setze, schickt der Sender dann die kompletten 1024 bytes rüber? 800 sinnvolle bytes und die restlichen 224 sind dann irgendein byte-Müll. Der Empfänger kann dann mit DatagramPacket.getLength() abfragen, wie viel sinnvolle bytes geschrieben wurden, also 800. So hab ich mir's vorgestellt.

Oder verkleinert der Sender das byte[] auf 800, bevor ers wegschickt?

Du hast einen Array mit einer beliebigen Länge. Und mit dem Parameter offset und length gibst Du an, welchen Bereich aus dem Array Du versenden möchtest.
Beispiel:
Code:
// Der Array
byte[] daten = {0, 1, 2, 3, 4};
// Das DatagramPacket (address wäre eine InetAdress-Objekt, port vom Typ int)
DatagramPacket dp = new DatagramPacket(b, 1, 3, address, port);

Beim Empfänger würde dann ein DatagramPacket ankommen. Ein Aufruf der Methode getLength() wurde 3 als Ergebnis liefern, ein Aufruf der Methode getData() einen Array {1, 2, 3}.

Ich hoffe, dass ich damit Deine Fragen beantwortet habe :) . Ansonsten: Einfach nochmal fragen ;) .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Kann keine DatagramPackets versenden von einem Jar Archiv Netzwerkprogrammierung 4
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Mit Java Mail Mails an Webmailer schicken Netzwerkprogrammierung 1
x46 Byte-Array per for-Schleife schicken Netzwerkprogrammierung 1
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
H Daten an Textfeld einer Webseite schicken Netzwerkprogrammierung 2
X Password übers Netzwerk schicken jPasswordField Netzwerkprogrammierung 2
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
C Im Abstand von x Sekunden Zufallszahlen vom Client an den Server schicken? Netzwerkprogrammierung 6
S Socket XML-Daten und Parameter an Server schicken Netzwerkprogrammierung 3
J HTTP Bild an Client schicken mit com.sun.net.httpserver Netzwerkprogrammierung 5
X Port scannen/schicken Netzwerkprogrammierung 4
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
N Socket Stream Schicken Netzwerkprogrammierung 13
W Zeichen von Client an Server schicken Netzwerkprogrammierung 5
G Nachricht an mehrere Clients schicken Netzwerkprogrammierung 10
H Server soll Daten schicken, aber wie? Netzwerkprogrammierung 47
J Post-Daten an URL schicken Netzwerkprogrammierung 2
N java.awt.image.BufferedImage über Socket schicken Netzwerkprogrammierung 3
M problem beim schicken von XML-DAtenpacketen via TCP Netzwerkprogrammierung 3
S Ordner schicken Netzwerkprogrammierung 12

Ähnliche Java Themen


Oben