Domanda

sto lavorando su una programmazione di rete di assegnazione sulla scrittura di un semplice sistema di messaggistica istantanea (praticamente come la versione più semplice di windows messenger).

la spec specifica che devo inviare più di 4 campi di dati in un singolo pacchetto di datagramma, questi sono:

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

Vorrei essere insegnato come per il confezionamento di tutti questi dati in un singolo pacchetto.

AGGIORNAMENTO:thx per l'aiuto finora, ma dire che ho String frase e la Stringa Da il modo normale per la patch di pacchetti singolarmente, può essere

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

ma esattamente come posso aggiungere la stringa sendData insieme con la frase di stringa?

È stato utile?

Soluzione

In breve, ciò che devi fare è:

  1. creare un oggetto (classe) che contiene i 4 campi (da / a / enum / messaggio)
  2. puntate questo. Si deve implementare Serializable . Vedi altre soluzioni qui per sapere come puntate
  3. convertire in un array di byte e inviare verso il basso la presa (vedi altrove per i dettagli)

All'altra estremità potrai leggere questo bytestream, deserialise e gettarlo ai un'istanza della classe definita in 1. sopra.

Con la creazione di un oggetto che contiene i 4 campi e serializzazione questo oggetto, questo consente di inviare tutti e quattro i campi insieme (ho l'impressione che questa è la pietra d'inciampo?).

Si noti che datagrammi avranno limiti di dimensione imposti dagli strati di trasporto della rete, ma per questa applicazione ho il sospetto che non è un problema.

Altri suggerimenti

È possibile inviare qualsiasi oggetto serializzabile utilizzando qualcosa di simile.

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);

È sufficiente aggiungerli prima di passarli alla interfaccia di rete. Qualcosa sulla falsariga di:

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

Se non sono tutte le stringhe, è necessario codificare come tali.

Ci sono un sacco di opzioni per la codifica dei dati, che scendono a mettere quattro campi in una struttura di dati, e quindi l'invio che in un colpo solo.

La parte importante è che la codifica deve dimostrare di quale dei quattro campi, al punto che nel pacchetto, altrimenti è la fine, non sarà in grado di decodificare in modo affidabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top