/* * 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(); } } }