rendered paste bodypackage 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);
}
}
}