Strumenti Utente

Strumenti Sito


lpr-b-2007-2008:odp
/**
 * @author Danelutto Marco
 *
 * Questa classe permette la serializzazione e deserializzazione di oggetti nei DatagramPacket. 
 * Per spedire un oggetto serializzato in un DatagramPacket, si crea un oggetto ODP con il costruttore
 * ODP(Object o). Successivamente si utilizza il metodo DatagramPacket getDatagramPacket(InetAddress address, int 
port) 
 * per ottenere il datagram packet da spedire, che contiene l'oggetto o serializzato nel payload.
 * 
 * Per ricevere un oggetto serializzato in un pacchetto, si usa il metodo statico ODP getODP(DatagramPacket dp) 
 * per ottenere un ODP e quindi si invoca il metodo Object getObject() sull'oggetto ODP.
 * 
 */
 
/*
 * Created on Nov 13, 2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
 
package TFTPudp;
import java.net.*;
import java.io.*;
 
 
public class ODP {
        private static final int MAX_UDP_PAYLOAD = 65507;
        /** 
         * variabile utilizzata per memorizzare l'oggetto che deve essere 
         * (o che e' stato) serializzato mediante il DatagramPacket.
         */
        private Object o = null;
 
        /** 
         * costruttore per la creazione di un ODP 
         * Questo costruttore si usa per creare un pacchetto da spedire.
         * @param o l'oggetto da serializzare nel pacchetto
         */
        public ODP(Object o) {
                this.o = o;
        }
 
 
        /**
         * creazione di un oggetto ODP a partire da un pacchetto DatagramPacket. Si passa il datagram packet come 
parametro 
         * e da questo si ottiene l'oggetto che era stato incaspulato come payload
         * @param dp  il DatagramPacket da cui si crea l'oggetto ODP
         * @return l'oggetto ODP con l'object deserializzato in o
         */
        public static ODP getODP(DatagramPacket dp) throws ClassNotFoundException, IOException {
                ODP o = null;
                ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData());
                ObjectInputStream ois = new ObjectInputStream(bis);
                o = new ODP(ois.readObject());
                return o;
        }
 
        /**
         * metodo per ottenere un DatagramPacket dall'oggetto ODP
         * @param addr l'indirizzo da utilizzare per la spedizione del pacchetto
         * @param port porta destinazione per il pacchetto
         * @return il datagram packet con l'oggetto serializzato nel payload
         * @throws Exception 
         */
        public DatagramPacket getDatagramPacket(InetAddress addr, int port) throws IOException {
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                ObjectOutputStream oos;
                try {
                        oos = new ObjectOutputStream(bos);
                        oos.writeObject(o);
                } catch (IOException e) {
                        e.printStackTrace();
                }
                byte[] buf = bos.toByteArray();
                if(buf.length > MAX_UDP_PAYLOAD)
                        throw new IOException("Object too big");
                DatagramPacket dp = new DatagramPacket(buf, buf.length, addr, port);
                return (dp);
        }
 
        /**
         * utilizzata per prelevare l'oggetto "deserializzato" dal pacchetto
         * @return l'oggetto deserializzato dalla getODP(DatagramPacket) (o memorizzato mediante la ODP(Object)
         * 
         */
        public Object getObject() {
                return o;
        }
 
}
lpr-b-2007-2008/odp.txt · Ultima modifica: 19/09/2008 alle 14:08 (16 anni fa) (modifica esterna)