1 / 19

Socket (of communicatiekanaal):

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

Download Presentation

Socket (of communicatiekanaal):

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

More Related