Frage

ich arbeite in einer Netzwerk Programmieraufgabe über ein einfaches IM-System (ziemlich ähnlich wie die einfachste Version von Windows Messenger) zu schreiben.

spec gibt an, dass i mehr als 4 Felder von Daten in einem einzigen Datagramm-Paket senden muss, das ist:

To From Type Message
where type refers to message type, implemented as a user defined enum class.

Ich möchte gelehrt werden, wie man all diese Daten in ein einzelnes Paket zu packen.

UPDATE: thx für die Hilfe so weit, aber sagen, ich habe String Satz und String aus der normale Weg, um das Paket zu patchen einzeln wäre

byte[] sendData = new byte [256]
sendData = sentence.getBytes();

aber wie genau kann ich das „von“ string zu senddata hängen zusammen mit dem Satz String?

War es hilfreich?

Lösung

Kurz gesagt, was Sie tun müssen, ist:

  1. ein Objekt (Klasse) erstellen, die Ihre vier Felder enthalten (von / bis / enum / message)
  2. serialise dies. Es hat zu implementieren Serializable . Andere Lösungen, die hier, wie serialise
  3. , um einen Byte-Array umwandeln und die Buchse herabs (siehe an anderer Stelle für Details)

Am anderen Ende werden Sie diese Bytestrom, deserialise lesen und es auf eine Instanz der Klasse in 1. oben definiert gegossen.

Durch die ein Objekt erstellen die 4 Felder und Serialisierung dieses Objekt enthält, dies ermöglicht es Ihnen, alle vier Felder senden zusammen (ich habe den Eindruck, dass dies der Stein des Anstoßes?).

Beachten Sie, dass Datagramme werden von den Netzwerk-Transportschichten auferlegt Größenbeschränkungen, aber für diese Anwendung ich vermute, das ist kein Problem.

Andere Tipps

Sie können eine beliebige Serializable Objekt senden so etwas wie dieses verwendet wird.

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(buffer);
out.writeObject(objectYouWantToSend);
out.close();
buffer.close();
DatagramPacket packet = new 
    DatagramPacket(buffer.toByteArray(), 
                   buffer.size(), 
                   InetAddress.getByName(...),
                   portNumber);
socket.send(packet);

Sie fügen Sie einfach sie, bevor sie an die Netzwerk-Schnittstelle übergeben. Etwas entlang der Linien von:

byte[] buff = new byte[256];
// Add al your fields here to buff.
DatagramPacket packet = new DatagramPacket(buff, buff.length, address, 1234);
socket.send(packet);

Wenn sie nicht alle Strings sind, dann müssen Sie sie als solche kodieren.

Es gibt viele Möglichkeiten für die Daten kodieren, von denen alle kommen die vier Felder in einer Datenstruktur zu setzen, und dann, dass alle in einem Rutsch zu senden.

Der wichtigste Teil ist, dass die Codierung, welche der vier Felder zeigen muss, an welcher Stelle in dem Paket ist, da sonst das ferne Ende wird es nicht in der Lage sein, zuverlässig zu dekodieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top