// UDPAsiakasEsimerkki.java SJ // tiedosto palvelimelle UDP pakettina import java.net.*; import java.math.BigInteger; public class UDPAsiakasEsimerkki { public static void main(String[] args) { if (args.length < 2) { System.err.println("Käyttö: java UDPAsiakasEsimerkki " + "luku palvelinosoite [portti]"); return; } UDPAsiakasEsimerkki a = new UDPAsiakasEsimerkki(); int portti = 1235; if (args.length > 2) { portti = Integer.valueOf(args[2]); } // syötedata byte[] t1 = (new BigInteger(args[0])).toByteArray(); // verkkokutsu byte[] data = a.haedata(t1, args[1], portti); if (data != null) System.out.println(new BigInteger(data)); } // main() // lähetetään data palvelimelle, vastaanotetaan ja palautetaan vastaus public byte[] haedata(byte[] data, String osoite, int portti) { DatagramSocket s = null; try { s = new DatagramSocket(); // mikä vain portti // rakennetaan ja lähetetään paketti DatagramPacket paketti = new DatagramPacket(data, 0, data.length, InetAddress.getByName(osoite), portti); s.send(paketti); // rakennetaan ja vastaanotetaan paluupaketti DatagramPacket paluuPaketti = new DatagramPacket(new byte[16*1024], 16*1024); s.receive(paluuPaketti); // paluupaketista erotetaan varsinainen viesti jotta BigInteger // voisi tehdä luvun minimimittaisesta tavutaulusta byte[] paluuData = new byte[paluuPaketti.getLength()]; System.arraycopy(paluuPaketti.getData(), 0, paluuData, 0, paluuPaketti.getLength()); return paluuData; // 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 } // haedata() }