All pastes #2092777 Raw Edit

Mine

public text v1 · immutable
#2092777 ·published 2011-10-23 09:56 UTC
rendered paste body
package udpclient;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.FileOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketTimeoutException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Udpclient {

    private static final Logger logger = Logger.getLogger(Udpclient.class.getName());

    public static void main(String[] args) {
        String fileName = "getFile";

        byte[] dolazniSpremnik = new byte[20240];
        byte[] odlazniSpremnik = new byte[512];


        LinkedList<String> listaPrimljenihPaketa = new LinkedList<String>();


        odlazniSpremnik = fileName.getBytes();    //pretvori zahtjev za wav file u bytove
        InetAddress adresa = null;
        int port = 8883;


        Map<Integer, String> mapa = new LinkedHashMap<Integer, String>();

        try {
            DatagramSocket socket = new SimpleSimulatedDatagramSocket(0.20, 250);
            adresa = InetAddress.getLocalHost(); //dobi adresu klijenta
            DatagramPacket odlazniPaket = new DatagramPacket(odlazniSpremnik, odlazniSpremnik.length, adresa, port);  //napravi odlazni paket
            socket.send(odlazniPaket); //posalji zahtjev za fileom

            DatagramPacket dolazniPaket = new DatagramPacket(dolazniSpremnik, dolazniSpremnik.length);

            while (true) {

                try {
                    socket.receive(dolazniPaket);
                    String paket = new String(dolazniPaket.getData(), dolazniPaket.getOffset(), dolazniPaket.getLength());

                    listaPrimljenihPaketa.add(paket);  //dodaj sve pakete u listu

                    String brojPrimljenogPaketa = paket.split(":")[0].trim();

                    Pattern p = Pattern.compile("^.*:.*:(.*)$");
                    Matcher m = p.matcher(paket);

                    if (m.matches()) {
                        mapa.put(Integer.parseInt(brojPrimljenogPaketa), m.group(1));
                    }

                    //pretvori broj primljenog paketa u bytove
                    odlazniSpremnik = brojPrimljenogPaketa.getBytes();

                    //posalji paket u kojem je potvrda da sam primio odredeni paket
                    DatagramPacket paketPotvrda = new DatagramPacket(odlazniSpremnik, odlazniSpremnik.length, adresa, port);
                    
                    logger.info("Saljem potvrdu za paket: " + brojPrimljenogPaketa);
                    socket.send(paketPotvrda);

                } catch (SocketTimeoutException e) {
                    break;
                } catch (IOException ex) {
                    Logger.getLogger(Udpclient.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
            FileOutputStream fosFake = new FileOutputStream("losaKopija.wav");
            
            for (int key: mapa.keySet()){
                fosFake.write(Base64.decode(mapa.get(key)));
            }
            fosFake.close();
            

            ArrayList<Integer> list = new ArrayList<Integer>();
            for (int key : mapa.keySet()) {
                list.add(key);
            }

            Collections.sort(list);

            FileOutputStream fos = new FileOutputStream("dobraKopija.wav");

            for (Integer key : list) {
                fos.write(Base64.decode((mapa.get(key))));
            }
            fos.close();


        } catch (Exception ex) {
            Logger.getLogger(Udpclient.class.getName()).log(Level.SEVERE, null, ex);
        }


    }
}