través socket servidor recibir multiples enviar elementos datos conexión con clientes cliente java networking udp

servidor - sockets java multiples clientes



Envío de objetos a través de la red usando UDP en Java (1)

No he encontrado una respuesta exacta al problema que estoy teniendo, así que voy a preguntar esto de todos modos, y si lo hice, de hecho, volver a publicar una pregunta que ya se ha hecho, me disculpo.

Estoy haciendo otra asignación de laboratorio para mi clase Java, y para el laboratorio de esta semana, tengo que hacer un servidor UDP para enviar un objeto Message a través de la red, luego tengo que hacer un cliente UDP para leer en ese mensaje. El Mensaje en sí es solo un Objeto que tiene un mensaje de Cadena y un nombre de usuario de Cadena; bastante arbitrario. El mensaje es serializable.

Ahora, lo que estoy teniendo un problema es cómo enviar el Objeto Message a través de la red dentro de un DatagramPacket. El constructor actual me ha puesto una matriz de bytes, el tamaño de la matriz, la dirección Inet y el número de puerto. Mi última pregunta es: ¿cómo puedo averiguar el tamaño de la matriz y cómo convertir mi Mensaje en bytes para enviar?


Necesita serializar su clase de mensaje en una matriz de bytes. Esta será la matriz de bytes que envíe (y será fácil obtener el tamaño en ese punto).

En el cliente, deseará deserializar la matriz de bytes de nuevo en un objeto Message.

Java proporciona un conjunto de clases para gestionar la serialización / deserialización, y el objeto que desea serializar debe implementar la interfaz "Serializable".

Algo como esto funcionaría:

// Serialize to a byte array ByteArrayOutputStream bStream = new ByteArrayOutputStream(); ObjectOutput oo = new ObjectOutputStream(bStream); oo.writeObject(messageClass); oo.close(); byte[] serializedMessage = bStream.toByteArray();

Y en el extremo receptor:

ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes)); Message messageClass = (Message) iStream.readObject(); iStream.close();

Tenga en cuenta que debe crear una interfaz común que se comparte entre el cliente y el servidor, esto permitirá una fácil serialización / deserialización de la carga útil.