Strumenti Utente

Strumenti Sito


lpr-b:receiver
/*
 * Created on Nov 21, 2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package TFTPudp;
 
import java.io.FileOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.logging.Logger;
 
/**
 * @author Danelutto Marco
 *
 * Questa classe <8F> la classe che implementa il ricevitore del file. 
 * Va invocata con il nome del file da ricevere come parametro
 * 
 */
public class Receiver {
 
        public static void main(String[] args) {
                Logger log = Logger.getLogger("TFTPudp"); 
                try {
                        String nomeFile = ""; 
                        try {
                                nomeFile = args[0];
                        } catch(ArrayIndexOutOfBoundsException e) {
                                nomeFile = "dummy.txt";
                        }
                        // apertura del file per la scrittura ...
                        FileOutputStream fd = new FileOutputStream(nomeFile);
                        // creazione del datagram socket per la ricezione, si usa la porta definita nel Sender
                        DatagramSocket ds = new DatagramSocket(Sender.PORT);
                        boolean ancora = true;
                        int seqNo = 0;
                        do {
                                // ricezione di un pacchetto
                                DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
                                ds.receive(dp);
                                log.info("Ricevuto pacchetto ");
                                // parsing del pacchetto
                                ODP odp = ODP.getODP(dp);
                                TFTPmessage msg = (TFTPmessage) odp.getObject();
                                log.info("Numero di sequenza "+msg.nSeq);
                                if(msg.nSeq == seqNo) { // solo nel caso non sia un duplicato, lo scrivo nel file
                                        fd.write(msg.buffer,0,msg.buffer.length);
                                        seqNo++;
                                        ancora = msg.more;
                                }
                                // questa e' solo per vedere se funziona ... 
                                Thread.sleep(1200);
                                // preparazione del messaggio di ACK
                                TFTPmessage ack = new TFTPmessage(seqNo-1,null,0,msg.more);
                                ODP ackp = new ODP(ack);
                                // spedizione 
                                ds.send(ackp.getDatagramPacket(dp.getAddress(),dp.getPort()));
                                log.info("Spedito ack "+(seqNo-1));
                        } while(ancora);
                } catch(Exception e) {
                        e.printStackTrace();
                }
        }
}
lpr-b/receiver.txt · Ultima modifica: 13/11/2007 alle 19:01 (17 anni fa) da Marco Danelutto