190 likes | 284 Views
NETWERKTOEPASSINGEN-communicatie. 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
E N D
NETWERKTOEPASSINGEN-communicatie • 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 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting JAVA -- H11
NETWERKTOEPASSINGEN • 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)) JAVA -- H11
NETWERKTOEPASSINGEN • 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 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting JAVA -- H11
NETWERKTOEPASSINGEN • 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); JAVA -- H11
NETWERKTOEPASSINGEN • 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 JAVA -- H11
NETWERKTOEPASSINGEN • 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 JAVA -- H11
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 -- H11
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 -- H11
NETWERKTOEPASSINGEN-datagrammen • 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! 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting JAVA -- H11
NETWERKTOEPASSINGEN-datagrammen • 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 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting JAVA -- H11
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 -- H11
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 -- H11
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 -- H11
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 -- H11
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 -- H11
NETWERKTOEPASSINGEN – 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) 1. Communicatie Client-Server 2. Datagrammen UDP Client-server Broadcasting JAVA -- H11
NETWERKTOEPASSINGEN – client ontvangt MulticastSocket socket = new MulticastSocket(4446); InetAddress address = InetAddress.getByName("230.0.0.1"); // multicast : 224 - 239 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 -- H11
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 -- H11
NETWERKTOEPASSINGEN – server zendt DatagramSocket s = new DatagramSocket(4446); InetAddress group = InetAddress.getByName("230.0.0.1"); 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(); JAVA -- H11