Pregunta

Estoy trabajando en una tarea de programación de la red acerca de cómo escribir un sistema de mensajería instantánea sencilla (más o menos como la versión más simple de Windows Messenger).

la especificación especifica que i que enviar más de 4 campos de datos en un único paquete de datagramas, son:

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

Me gustaría que se les enseñe cómo empacar todas estas datas más en un solo paquete.

ACTUALIZACIÓN: thx por la ayuda hasta el momento, pero decir que he Cadena frase y Cadena De la forma normal de parchear el paquete individual sería

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

Pero, ¿cómo exactamente puedo añadir el "de" cadena de sendData junto con la cadena de oración?

¿Fue útil?

Solución

En pocas palabras, lo que hay que hacer es:

  1. crear un objeto (clase), que contiene los 4 campos (de / a / enum / mensajes)
  2. serializar esto. Se tiene que aplicar Serializable . Ver otras soluciones aquí para saber cómo serializar
  3. Convertir en una matriz de bytes y enviar por el zócalo (consulte la otra parte para más detalles)

En el otro extremo leerás esta bytestream, deserialise y echarlo a una instancia de la clase definida en el punto 1 anterior.

Al crear un objeto que contiene los campos 4 y serialising este objeto, esto le permite enviar los cuatro campos juntos (me da la impresión de que este es el obstáculo?).

Tenga en cuenta que los datagramas tendrán límites de tamaño impuestas por las capas de transporte de la red, pero para esta aplicación sospecho que no es un problema.

Otros consejos

Puede enviar cualquier objeto serializable usar algo como esto.

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

Simplemente añada antes de pasarlos a la interfaz de red. Algo a lo largo de las líneas de:

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

Si no lo son todas las cadenas, que necesita para codificar como tales.

Hay un montón de opciones para la codificación de los datos, todos los cuales vienen a poner los cuatro campos en una estructura de datos, y luego envía de que todo de una vez.

La parte importante es que la codificación necesita mostrar cuál de los cuatro campos es en que punto en el paquete, de lo contrario el otro extremo no será capaz de descodificar de forma fiable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top