Strumenti Utente

Strumenti Sito


lpr-b-2007-2008:sorgenteodp
/**
 * @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/sorgenteodp.txt · Ultima modifica: 19/09/2008 alle 14:08 (11 anni fa) (modifica esterna)