// MD5Asiakas4.java SJ // tiedosto palvelimelle UDP pakettina import java.net.*; import java.util.Scanner; import java.io.*; public class MD5Asiakas4 { public static void main(String[] args) { if (args.length < 2) { System.err.println("Käyttö: java MD5Asiakas4 " + "tiedosto palvelinosoite [portti]"); return; } MD5Asiakas4 a = new MD5Asiakas4(); int portti = 1235; if (args.length > 2) { portti = Integer.valueOf(args[2]); } byte[] t1 = LueTiedosto(args[0]); byte[] tiiviste = a.haetiiviste1(t1, args[1], portti); if (tiiviste != null) System.out.println(a.bintohex(tiiviste)); } // main() // lähetetään data palvelimelle, vastaanotetaan ja palautetaan tiiviste public byte[] haetiiviste1(byte[] data, String osoite, int portti) { DatagramSocket s = null; try { s = new DatagramSocket(); // mikä vain portti DatagramPacket paketti = new DatagramPacket(data, 0, data.length, InetAddress.getByName(osoite), portti); s.send(paketti); DatagramPacket paluuPaketti = new DatagramPacket(new byte[128/8], 128/8); s.receive(paluuPaketti); return paluuPaketti.getData(); // poikkeusten käsittely } catch (Exception e) { System.err.println(e); if (s != null) try { s.close(); // suljetaan varuilta vielä täälläkin } catch (Exception e2) {} return null; } // catch } // haetiiviste1() // Lukee tiedoston ja palauttaa tavutaulukon static byte[] LueTiedosto(String nimi) { try { RandomAccessFile f = new RandomAccessFile(nimi, "r"); long len = f.length(); byte[] l = new byte[(int)len]; f.read(l); f.close(); return l; } catch (IOException e) { System.out.println(e); return null; } } // palauttaa tavutaulukon heksaesityksen merkkijonona public String bintohex(byte[] A) { int pituus = A.length; StringBuffer sb = new StringBuffer(pituus*2); for (int i = 0; i < pituus; i++) { if ((A[i] & 0xFF) < 0x10) sb.append("0"); sb.append(Integer.toHexString(A[i] & 0xFF)); } return sb.toString(); } }