Strumenti Utente

Strumenti Sito


lpr-b-2007-2008:sender
/*
 * Created on Nov 17, 2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package TFTPudp;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
 
/**
 * @author Danelutto Marco
 *
 * Questa <8F> la classe che si usa per spedire un file. 
 * Il nome del file da spedire e' passato come primo parametro della riga di comando
 * Il nome della macchina destinazione e' passato come secondo parametro della riga di comando
 */
public class Sender {
 
        /**
         * sono i parametri utilizzati in questo main e (PORT) nel main del receiver
         */
        static final int LPCK = 16;
        public static final int PORT = 12312;
        static final int TIMEOUT = 1000;
 
        public static void main(String[] args) throws Exception {
                try {
                        String filename = ""; 
                        String hostname = "";
                        try {
                                filename = args[0];
                        } catch (ArrayIndexOutOfBoundsException e) {
                                filename = "prova.txt";
                        }
                        try {
                                hostname = args[1];
                        } catch (ArrayIndexOutOfBoundsException e) {
                                filename = "127.0.0.1";
                        }
                        // apertura del file in lettura
                        FileInputStream inputFile = new FileInputStream(filename);
                        InetAddress dest = InetAddress.getByName(hostname);
                        int port = PORT;
                        // creazione del datagram socket 
                        DatagramSocket ds = new DatagramSocket();
                        int letti = 0;
                        int seqNo = 0;
                        // ciclo di spedizione
                        do {
                                byte[] buf = new byte[LPCK];
                                // lettura di un blocco dal file
                                letti = inputFile.read(buf, 0, LPCK);
                                // preparazione del pacchetto 
                                TFTPmessage msg = new TFTPmessage(seqNo, buf, (letti>0?letti:0), (letti > 0));
                                ODP odp = new ODP(msg);
                                // spedizione
                                ds.send(odp.getDatagramPacket(dest, port));
                                System.out.println("Spedito pacchetto "+seqNo);
                                // attesa dell'ack
                                ds.setSoTimeout(TIMEOUT);
                                DatagramPacket ack = new DatagramPacket(new byte[1024], 1024);
                                boolean acked = false;
                                do {
                                        try {
                                                ds.setSoTimeout(TIMEOUT);
                                                ds.receive(ack);
                                                ds.setSoTimeout(0);
                                                ODP oack = ODP.getODP(ack);
                                                TFTPmessage mack = (TFTPmessage) oack.getObject();
                                                System.out.println("Ricevuto ack "+mack.nSeq);
                                                acked = true;
                                                seqNo++;
                                        } catch (Exception e) {
                                                // se scatta il timeout, rispedisco il pacchetto
                                                ds.send(odp.getDatagramPacket(dest, port));
                                                System.out.println("Rispedito pacchetto "+seqNo);
                                        }
                                } while (!acked); // se non ricevo l'ack ripeto la spedizione del pacchetto corren
te
                        }
                        while (letti > 0);  // e vado avanti finch<8F> ho cose da spedire
 
                } catch (FileNotFoundException e1) {
                        e1.printStackTrace();
                }
        }
}
lpr-b-2007-2008/sender.txt · Ultima modifica: 19/09/2008 alle 14:08 (11 anni fa) (modifica esterna)