Java Nätverks API URL sockets Nätverkskomponenter i Java • • • • URL Stream sockets (TCP) Datagram sockets (UDP) Remote Method Invocation (RMI) URL klassen • Representerar en web resurs – URL url1 =new URL(”http://www.du.se/~jbr”); – URL url2 =new URL(url1,”index.html”); • metoder – – – – getProtocol() getPort() openConnection() getContent() URLConnection klassen • Öppna en url koppling URLConnection con = url1.openConnection(); • Hämta innehållet på en websida BufferedReader Stream = new BufferedReader( new InputStreamReader( con.getInputStream())); Socket klassen • Java.net.Socket används för att göra en TCP socket för en klientapplikation. • getInputStream() och getOutputStream() används för att skapa InputStream/OutputStream objekt kopplade till Socket. Socket klassen Socket host host:port port TCP IP IP TCP HTTP ServerSocket klassen • Används för att skapa en socket koppling på server sidan – Tillsammans med Socket kan man skriva distribuerade Client/Server applikationer i Java utan att behöva bekymra sig om detaljer som accept på lägre nivåer Exempel: Dagens datum import java.net.*; import java.io.*; import java.util.Date; public class date { public static void main(String[] args) { try { for (int i = 0; i < args.length; i++) { Socket s = new Socket(args[i], 13); Exempel: Dagens datum InputStream is = s.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String theTime = br.readLine(); System.out.println(theTime); s.close(); } } catch (IOException e) { System.out.println((new Date()).toString()); } } } Uniform Datagram Protocol • TCP feltolerant, dvs sänder om packet inte kom fram eller blev korrupt • UDP har ingen felkontroll - Varför använda UDP? - UDP upp till 3ggr snabbare än TCP UDP klasser • Java.net.DatagramSocket – Fungerar både som klient och server – UDP portar skilda från TCP portar • java.net.DatagramPacket – Hållare för de byte´s som skall skickas resp sändas – Innehåller IP adressen och portnummer DatagramPacket konstruktorer public DatagramPacket( byte[] data, int length) public DatagramPacket( byte[] data, int length, InetAddress iaddr, int iport) DatagramPacket InetAddress ia = new InetAddess(”datan"); int chargen = 19; String s = "My second UDP Packet”; byte[] b = s.getBytes(); DatagramPacket dp = new DatagramPacket(b, b.length, ia, chargen); DatagramSocket konstruktorer public DatagramSocket() throws SocketException public DatagramSocket(int port) throws SocketException public DatagramSocket(int port, InetAddress laddr) throws SocketException Skicka Datagram class UDPSend { public static void main(String[] args) { try { InetAddress ia = InetAddress.getByName(args[0]); int chargen = 19; String s = "My second UDP Packet"; byte[] b = s.getBytes(); DatagramPacket dp = new DatagramPacket(b, b.length, ia, chargen); DatagramSocket sender = new DatagramSocket(); sender.send(dp); } catch (UnknownHostException e) {} catch (IOException e) {} } } MulticastSocket • Ärver DatagramSocket • Två nya metoder joinGroup() och leaveGroup(). • Endast multicastadresser 224.0.0.1 239.255.255.255 • Modifierad send som talar om hur många hops man skall skicka sitt multicast meddelande