// MD5Palvelin4.java // Ottaa vastaan UDP paketteja ja // palauttaa kustakin MD5-tiivisteen import java.net.*; import java.util.Scanner; import java.security.*; import java.io.*; public class MD5Palvelin4 { // kuunteleva palvelintöpseli DatagramSocket ss = null; public static void main(String[] args) { MD5Palvelin4 p; if (args.length > 0) p = new MD5Palvelin4(Integer.valueOf(args[0])); else p = new MD5Palvelin4(); p.kuuntele(); } // main() // konstruktorit avaavat yhteyden kuuntelulle public MD5Palvelin4(int portti) { try { ss = new DatagramSocket(portti); System.out.println("Kuunnellaan porttia " + portti); } catch (Exception e) { System.err.println(e); ss = null; } } public MD5Palvelin4() { this(1235); } // kuuntelu "säie" (säikeistetään myöhemmin kurssilla) public void kuuntele() { byte[] buf = new byte[256*256]; // 64kt DatagramPacket paketti = new DatagramPacket(buf, buf.length); try { while (true) { // odotetaan uutta pakettia ss.receive(paketti); // palvellaan yhteys palvele(paketti); } } catch (Exception e) { System.err.println(e); ss = null; } } // kuuntele() // palvelee yhden yhteyden public void palvele(DatagramPacket paketti) { try { System.out.println("Uusi paketti: " + paketti.getAddress() + ":" + paketti.getPort()); // alustetaan tiiviste MessageDigest md = MessageDigest.getInstance("MD5"); md.update(paketti.getData(), 0, paketti.getLength()); byte[] tiiviste = md.digest(); DatagramPacket vastaus = new DatagramPacket(tiiviste, 0, tiiviste.length, paketti.getAddress(), paketti.getPort()); ss.send(vastaus); } catch (Exception e) { System.err.println(e); } } // palvele() } // class