Presentation laddar. Vänta.

Presentation laddar. Vänta.

10 Kommunikation i Java Skansholm kap 18

Liknande presentationer


En presentation över ämnet: "10 Kommunikation i Java Skansholm kap 18"— Presentationens avskrift:

1 10 Kommunikation i Java Skansholm kap 18
Objektorienterade applikationer d2, förel. 10 10 Kommunikation i Java Skansholm kap 18 adresser filaccess över nätverk portar och sockets datagram multicasting client-server © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

2 Objektorienterade applikationer d2, förel. 10
Adressering En URL (=Uniform Resource Locator) identifierar en resurs på WWW protokoll://adress:port/filnamn En IP-adress identifierar en dator på Internet I textform som ovan eller som en följd av bytes Resurs: Fil, databasfråga, sökmotor, … Vad är skillnaden mellan en URL och en IP-adress? En URL är en logisk adress Samma URL kan mappas på olika IP-adresser vid olika tillfällen. Man måste förstås ha rättigheter © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

3 Java-klasser för Adressering
Objektorienterade applikationer d2, förel. 10 Java-klasser för Adressering java.net.URL för hantering av URL-objekt java.net.URLConnection för hantering av resurser som refereras av URL-objekt java.net.InetAddress för hantering av IP-adresser © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

4 Objektorienterade applikationer d2, förel. 10
java.net.URL Metoder (i urval) Förklaring new URL(String adress) skapar ett URL-objekt av adress URLConnection openConnection() öppnar en förbindelse String getProtocol() ger protokollet String getHost() ger datoradressen String getPort() ger portnumret String getFile() ger filnamnet Det finns många fler metoder… © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

5 java.net.URLConnection
Objektorienterade applikationer d2, förel. 10 java.net.URLConnection Metoder (i urval) Förklaring InputStream getInputStream() ger en inström som läser från den öppna förbindelsen OutputStream getOutputStream() ger en utström som skriver på den öppna förbindelsen Object getContent() ger objekt från strömmen int getContentLength() ger resursens (filens) längd String getContentType() ger resursens typ long getDate() ger tidpunkt för resursens skapelse long getLastModified() ger tidpunkt för senaste ändring Det finns många fler metoder… © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

6 Objektorienterade applikationer d2, förel. 10
Ex. Läsning av fil try { URL url = new URL(” URLConnection uc = url.openConnection(); } catch (MalformedURLException e) { ... } catch (IOException e) { ... } BufferedReader in = new BufferedReader( new InputStreamReader(uc.getInputStream())); String line; while ( (line = in.readLine()) != null ) System.out.println(line); © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

7 Objektorienterade applikationer d2, förel. 10
Portar och sockets En port är en logisk anslutningspunkt till en tjänst som tillhandahålls av en dator. En socket är en kommunikationskanal mellan ett program och omgivningen genom en port. Portnumrering Portnummer: är standardiserade, resten kan användas fritt 80 http-kommunikation 21 ftp-kommunikation © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

8 Objektorienterade applikationer d2, förel. 10
Portar och sockets Objektorienterade applikationer d2, förel. 10 Dator Nätverk Program port socket © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

9 Objektorienterade applikationer d2, förel. 10
Datagram Ett datagram är ett datapaket som innehåller data som skall överföras (”nyttolast”) mottagardatorns IP-adress portnumret för mottagartjänsten Datagram kan komma fram i godtycklig ordning Ingen leveransgaranti Jfr vykort som skickas med ”Postia”. data 1837 © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

10 Objektorienterade applikationer d2, förel. 10
Datagram Objektorienterade applikationer d2, förel. 10 Sändare port Dator Nätverk Mottagare Dator IP-adress: 1837 Datagrampaket data… 1837 Den vänstra datorn kan naturligtvis befinna sig i samma nätverk. © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

11 Objektorienterade applikationer d2, förel. 10
java.net.InetAddress Metoder (i urval) Förklaring InetAddress getLocalHost() ger adressen till den egna datorn InetAddress getByName(String hostName) ger adressen till datorn hostName (namnet symboliskt eller IP i textform) String getHostName() ger namnet på den egna datorn String getHostAddress() ger IP-adressen i textform till den egna datorn Symboliskt namn IP i textform Översättning från namn till IP-adress baseras på lokal konfig.info. + nättjänster som DNS=Domain Name System och NIS=Network Information Service getHostName(): om inte namnet sparats kan reverse name resolution ske © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

12 java.net.DatagramSocket
Objektorienterade applikationer d2, förel. 10 java.net.DatagramSocket Metoder (i urval) Förklaring new DatagramSocket(int port) skapar en socket genom porten port new DatagramSocket() skapar en socket genom en ledig port send(DatagramPacket p) sänder datagrammet p från denna socket receive(DatagramPacket p) tar emot datagrammet p från denna socket setSoTimeOut(long t) anger att receive skall vänta högst t ms vid timeout kastas SocketTimeoutException close() stänger förbindelsen int getLocalPort() ger numret på den lokala porten som denna socket är bunden till © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

13 java.net.DatagramPacket
Objektorienterade applikationer d2, förel. 10 java.net.DatagramPacket Metoder (i urval) Förklaring new DatagramPacket(byte[] buf, int len, InetAddress iAddr, int port) skapar ett datagrampaket för sändning av len bytes i buf till port på iAddr new DatagramPacket(byte[] buf, int len) skapar ett datagrampaket för mottagning av max len bytes i buf (len <= buf.length) byte[] getData() ger en referens till paketets databuffert int getLength() ger längden på paketets datainnehåll InetAddress getAddress() ger adressen till avsändaren (vid mottagning) ger adressen till mottagaren (vid sändning) int getPort() ger portnumret till avsändaren (vid mottagning) ger portnumret till mottagaren (vid sändning) © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

14 Exempel: Skicka och ta emot datagram
Objektorienterade applikationer d2, förel. 10 Exempel: Skicka och ta emot datagram Programmet SendMessage läser text från tangtentbordet och skickar varje rad som datagram till IP-adressen på port 1234 Programmet ReceiveMessage hämtar datagram från port 1234 och skriver ut dem i konsolfönstret är en s.k. loop-back-adress som lämpar sig för testning lokalt innanför brandvägg. © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

15 Objektorienterade applikationer d2, förel. 10
SendMessage.java import java.net.*; import java.io.*; class SendMessage { public static void main( String[] arg ) throws UnknownHostException, SocketException, IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); InetAddress toAddr = InetAddress.getByName(arg[ 0 ]); int toPort = Integer.parseInt(arg[ 1 ]); DatagramSocket socket = new DatagramSocket(); while (true) { System.out.print("? "); String message = in.readLine(); if (message == null) break; byte[] data = message.getBytes(); socket.send(new DatagramPacket(data, data.length, toAddr, toPort)); } exekvering > java SendMessage © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

16 Objektorienterade applikationer d2, förel. 10
ReceiveMessage.java import java.net.*; import java.io.*; class ReceiveMessage { public static void main(String[] arg) throws SocketException, IOException { int receivePort = Integer.parseInt(arg[ 0 ]); DatagramSocket socket = new DatagramSocket(receivePort); byte[] data = new byte[1024]; while (true) { DatagramPacket packet = new DatagramPacket(data, data.length); socket.receive(packet); System.out.println("Message from " + packet.getAddress().getHostName()); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println(message); } exekvering > java ReceiveMessage 1234 © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

17 Objektorienterade applikationer d2, förel. 10
Multicasting multicasting: ett datagram skickas till alla medlemmar i en grupp (1:N) sändaren kan själv ingå i gruppen som får datagrammet fiktiva (klass D) IP-adresser mellan och används för adressering för multicasting används MulticastSocket © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

18 Objektorienterade applikationer d2, förel. 10
Multicasting Objektorienterade applikationer d2, förel. 10 S/M 9876 multicast-adress S/M 9876 multicast-adress data… 9876 data… 9876 data… 9876 data… 9876 S/M 9876 multicast-adress S/M 9876 multicast-adress Mottagaren tar själv emot meddelandet © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

19 java.net.MulticastSocket
Objektorienterade applikationer d2, förel. 10 java.net.MulticastSocket Metoder (i urval) Förklaring new MulticastSocket(int port) skapar en multicast-socket genom porten port send(DatagramPacket p) sänder datagrammet p från denna socket receive(DatagramPacket p) tar emot datagrammet p från denna socket joinGroup(InetAddress iAddr) Ansluter denna socket till multicast-gruppen på adressen iAddr leaveGroup(InetAddress iAddr) Kopplar bort denna socket från multicast-gruppen close() stänger förbindelsen MulticastSocket är subklass till DatagramSocket © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

20 Exempel: Skicka ett Multicast-datagram
Objektorienterade applikationer d2, förel. 10 Exempel: Skicka ett Multicast-datagram MulticastSocket sock = new MulticastSocket(9876); iAddr = InetAddress.getByName( ); sock.joinGroup(iAddr); DatagramPacket p = new DatagramPacket(data,data.length,iAddr,9876); sock.send(p); sock.leaveGroup(iAddr); Anslut till gruppen Skicka datagrammet OBS portnumret anges när socketen skapas Demonstrera Chat men gå inte igenom detaljerna. En lyssnartråd Lämna gruppen © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

21 Objektorienterade applikationer d2, förel. 10
Client-server Uppkopplad förbindelse mellan två program Dataflöde mellan två parter Adressering ej nödvändig vid varje överföring Datagram har för dålig säkerhet för många tillämpningar © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

22 Objektorienterade applikationer d2, förel. 10
Client-Server Objektorienterade applikationer d2, förel. 10 Nätverk Server Dator Klient port Flera klienter kan köras på samma dator. © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

23 Objektorienterade applikationer d2, förel. 10
java.net.Socket Metoder (i urval) Förklaring new Socket(InetAddress iAddr, int port) ansluter till porten port på servern på iAddr InputStream getInputStream() ger en ström för hämtning av data från den andra datorn OutPutStream getOutputStream() ger en ström för sändning av data till den andra datorn InetAddress getInetAddress() ger adressen som denna socket är ansluten till close() stänger förbindelsen Client socket används i klienterna samt i servern för att prata med klienterna. m.m. m.m. © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

24 Objektorienterade applikationer d2, förel. 10
java.net.ServerSocket Metoder (i urval) Förklaring new ServerSocket(int port) ger en socket för lyssning på porten port Socket accept() väntar på att klient ansluter sig ger tillbaks klientens socket close() stänger förbindelsen ServerSocket servSocket = new ServerSocket(1234); while (true) { // wait for a client to connect Socket clientSocket = servSocket.accept(); new clientHandler(clientSocket); } En serversocket skapas i servern och används för att lyssna efter anslutningar från klienter. Socketen från accept används för att prata med klienten. Kolla bankexemplet, bra för highscore-server Det finns nytt väderstationsexempel! Exekverar klienthanteringen i en tråd © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3

25 Exempel: Väderstation
Objektorienterade applikationer d2, förel. 10 Nätverk WeatherServer sensorPort SensorClient port DisplayClient displayPort database report temperatures request values send back values Flera klienter kan köras på samma dator. © Uno Holmer, DIT, Chalmers, DAT055, 17/18, lp 3


Ladda ner ppt "10 Kommunikation i Java Skansholm kap 18"

Liknande presentationer


Google-annonser