JAVA -- H111 Socket (of communicatiekanaal): UNIX-term voor de communicatie tussen processen -> uitwisseling van gegevens -> meerdere machines bv. client - server identificatie via socket-descriptor(tvgl. met een file-descriptor) 3 stappen (per socket): Openen Lezen en/of schrijven Sluiten NETWERKTOEPASSINGEN-communicatie 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting
JAVA -- H112 TCP/IP (Transmission Control Protocol en Internet Protocol) : een technologie voor het connecteren van niet-compatibele systemen (alles met alles) verbinding is connectie-georiënteerd (tvgl. met een telefoonlijn) end-to-end communicatie grote betrouwbaarheid : we krijgen telkens een bevestiging, dat de server de data ontvangen heeft ( datagrammen (UDP)) NETWERKTOEPASSINGEN
JAVA -- H113 Client-Server beschouwen als toepassingen, niet als machines! Server-programma bevat een ServerSocket per socket: koppeling aan specifiek poortnummer gereserveerde poortnummers: 21 FTP 20 Telnet 80 HTTP eigen poortnummer « definiëren » : > 1023 NETWERKTOEPASSINGEN 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting
JAVA -- H114 Client-Server werkwijze : server luistert aan een poort (wacht passief op contact) ServerSocket myService = new ServerSocket(poortNummer); client doet aanvraag voor connectie (de client- toepassing start de communicatie actief) Socket myClient= new Socket( “Servernaam”, poortNummer); NETWERKTOEPASSINGEN
JAVA -- H115 server aanvaardt connectie Socket clientSocket = null; clientSocket = myService.accept(); Client-Server programmeren in Java: package: java.net Socket: communicatie in twee richtingen ServerSocket: gebruikt door server NETWERKTOEPASSINGEN
JAVA -- H116 Stramien: openen socket(s) openen input-outputstream lezen-schrijven sluiten van streams sluiten van socket(s) MERK OP: expliciete exception afhandeling is noodzakelijk bij elke stap NETWERKTOEPASSINGEN
JAVA -- H117 NETWERKTOEPASSINGEN-SERVER SINGLE-THREADED SERVER: 1) ServerSocket x = new ServerSocket(4444); // om te luisteren 2) Socket clientS = x.accept(); // voor de communicatie 3) in = new DataInputStream(new BufferedInputStream(clientS.getInputStream()); 4) out = new PrintStream(new BufferedOutputStream( clientS.getOutputStream(),1024),false); 5) lus die uitgevoerd wordt, zolang de client en de server iets tegen elkaar te zeggen hebben: String fromUser, fromServer; while ((fromUser = in.readLine())!=null) { fromServer = protocol.inputVerw(fromUser); out.println(fromServer); } 6) x.close(); clientS.close(); in.close(); out.close();
JAVA -- H118 NETWERKTOEPASSINGEN-CLIENT CLIENT 1) Socket s = new Socket(“localhost”,4444); // voor de communicatie 2) in = new DataInputStream(clientS.getInputStream()); 3) out = new PrintStream(clientS.getOutputStream()); 4) lus: String fromServer, fromUser; while ((fromServer = in.readLine())!=null) { System.out.println(“Server:” + fromServer); fromUser = stdIn.readLine(); out.println(fromUser); } 5) s.close(); in.close(); out.close();
JAVA -- H119 NETWERKTOEPASSINGEN-datagrammen 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting UDP (Unreliable Datagram Protocol): « low-level networking » = simple network communication gebruikt pakketten: verbindingsloos Nadeel: minder betrouwbaar, geen garantie dat de pakketten de eindbestemming bereiken ( = de post ) Voordeel: geen setup, geen clear van de connectie, dus vlug!
JAVA -- H1110 NETWERKTOEPASSINGEN-datagrammen 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting Datagrammen: Nieuwe klassen nodig: DatagramPacket constructor met 4 parameters: data, de lengte van de data, de host waarnaar je zend, het poortnr contructor met 2 parameters: de data en de lengte DatagramSocket : met of zonder poortnr InetAddress : internet-adres van de host
JAVA -- H1111 NETWERKTOEPASSINGEN - server ontvangt SERVER ONTVANGT: 1) DatagramSocket s = new DatagramSocket(4445); // om te luisteren én pakketten te ontvangen 2) byte[] buf = new byte[256]; // als er iemand een pakket stuurt, die te groot is volgens // deze buffer, dan wordt de overschot vernietigd 3) DatagramPacket rpacket = new DatagramPacket(buf,buf.length); 4) s.receive(rpacket); 5) uitpakken: String r = new String(rpacket.getData());
JAVA -- H1112 NETWERKTOEPASSINGEN - server ontvangt int l = rpacket.getLength(); String h = rpacket.getAddress().getHostName(); InetAddress adres = rpacket.getAddress(); int poort = rpacket.getPort(); // als het pakket leeg is, dan hebben we toch heel wat // informatie over het afzendadres -> zo kunnen we dan // naar deze user pakketten sturen
JAVA -- H1113 NETWERKTOEPASSINGEN – server zendt SERVER ZENDT met dezelfde socket: 1) String eenString = “dit is een eerste pakket”; buf = eenString.getBytes(); 2) DatagramPacket spacket = new DatagramPacket(buf,buf.length,adres,poort); 3) s.send(spacket); 4) s.close();
JAVA -- H1114 NETWERKTOEPASSINGEN – client zendt CLIENT ZENDT: 1) String eenString = “dit is een tweede pakket”; byte [] message = eenString.getBytes(); 2) InetAddress adres = InetAddress.getByName(host); // het internet-adres van de host die bv. als programma- parameter is meegegeven (args[0]) 3) DatagramPacket zpacket = new DatagramPacket(message,message.length,adres,4445); 4) DatagramSocket s = new DatagramSocket(); 5) s.send(zpacket);
JAVA -- H1115 NETWERKTOEPASSINGEN – client ontvangt CLIENT ONTVANGT met dezelfde socket: 1) byte[] buf = new byte[256]; 2) DatagramPacket rpacket = new DatagramPacket(buf,buf.length); 3) s.receive(rpacket); 4) uitpakken: String r = new String(rpacket.getData()); 5) s.close();
JAVA -- H1116 NETWERKTOEPASSINGEN – broadcasting 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting Broadcasting betekent : op één netwerk alle clients hetzelfde bericht sturen Werken met MulticastSockets is een bijzondere vorm van broadcasting: enkel de clients die ingeschreven zijn bij een bepaalde groep, krijgen het bericht! (vb. Een film sturen naar 100 gebruikers : Films, software on demand)
JAVA -- H1117 NETWERKTOEPASSINGEN – client ontvangt MulticastSocket socket = new MulticastSocket(4446); InetAddress address = InetAddress.getByName(" "); // multicast : socket.joinGroup(address); DatagramPacket packet; for (int i = 0; i < 5; i++) { byte[] buf = new byte[256]; rpacket = new DatagramPacket(buf, buf.length); socket.receive(rpacket);
JAVA -- H1118 NETWERKTOEPASSINGEN – client ontvangt String received = new String(rpacket.getData()); System.out.println("Quote of the Moment: " + received); }// einde for-lus socket.leaveGroup(address); socket.close(); }
JAVA -- H1119 NETWERKTOEPASSINGEN – server zendt DatagramSocket s = new DatagramSocket(4446); InetAddress group = InetAddress.getByName(" "); while (moreData) { byte[] buf = new byte[256]; String x = getNextData(); buf = x.getBytes(); DatagramPacket spacket = new DatagramPacket(buf, buf.length, group, 4446); s.send(spacket); } s.close();