10 Kommunikation i Java Skansholm kap 18

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Next previous Innehåll Klassen URL Arbeta med URLer, exempel Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming"
Nätverk och Java, grunder Föreläsning 6
1 ITK:P2 F9 HTTP, Java servlets och Apache Tomcat DSV Peter Mozelius.
Filhantering Grundprincipen för filhantering Öppna filen
Nätverkskommunikation
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming”
Strömmar Vid läsning och skrivning används något som kallas strömmar.
Java Nätverks API URL sockets.
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
1 1 Musikprogrammering och mobil ljuddesign Föreläsning 4 Kommunikation över nätverk – UDP och MaxMSP.
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Av Oliver och Emil. En kort historia om Internet Datorn uppfanns i slutet av 1950-talet. Det var då man försökte koppla ihop flera datorer för att skicka.
Polymorfism.
Lektion 3 Mahmud Al Hakim
Objektorienterad Modellering Programmering och Analys
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Servlets — Java på serversidan. previous next 2 Servlets Introduktion Javaservlets är en i raden av SUN:s många tillämpningar av Java. Servlets kan grovt.
Föreläsning 14 ”Enkel” Filhantering.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
UDP Pålitlig byteström TCP
Java paket och jar-filer
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Network Services (Nätverkstjänster) Client/Servers And Their Interaction (Client/Server och deras interaktion)
1 Sockets Traditionellt har UNIX varit svag på IPC, InterProcess Communication. I augusti 1983 kom en ny IPC-mekanism i 4.2BSD som var enkel om konsistent.
Föreläsning 4 Klasser Och Objekt.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener.
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
1. Skriv programmet Fetkoll som läser igenom valfri webbsida och skriver ut alla ord och fraser som står med fetstil. I HTML anges det med starttaggen.
ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
William Sandqvist Distributed Computing Client – Server. En skrivarserver kan vara ett exempel på en Client-Server arkitektur. S Burd, Systems.
Föreläsning 9 Inläsning och utskrift på fil –SimpleTextFileReader –SimpleTextFileWriter Felsökning Java API.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Datorkommunikation Lektion 8 Mahmud Al Hakim
Föreläsning 8: Exempel och problemlösning
JVM Java Virtual Machine
Nätverkskommunikation
9 Aktiva objekt och trådar Skansholm kap 13
Presentationens avskrift:

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

Objektorienterade applikationer d2, förel. 10 Adressering En URL (=Uniform Resource Locator) identifierar en resurs på WWW protokoll://adress:port/filnamn http://www.chalmers.se/dit/index.htm En IP-adress identifierar en dator på Internet 129.16.214.8 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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

Objektorienterade applikationer d2, förel. 10 Ex. Läsning av fil try { URL url = new URL(”http://www.chalmers.se/dir/file.txt”); 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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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: 0-65535 0-1024 är standardiserade, resten kan användas fritt 80 http-kommunikation 21 ftp-kommunikation © Uno Holmer, DIT, Chalmers, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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 129.16.214.8 1837 © Uno Holmer, DIT, Chalmers, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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

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 www.chalmers.se IP i textform 129.16.214.8 Ö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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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 127.0.0.1 på port 1234 Programmet ReceiveMessage hämtar datagram från port 1234 och skriver ut dem i konsolfönstret 127.0.0.1 är en s.k. loop-back-adress som lämpar sig för testning lokalt innanför brandvägg. © Uno Holmer, DIT, Chalmers, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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 127.0.0.1 1234 © Uno Holmer, DIT, Chalmers, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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 224.0.0.0 och 239.255.255.255 används för adressering för multicasting används MulticastSocket © Uno Holmer, DIT, Chalmers, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

Objektorienterade applikationer d2, förel. 10 Multicasting Objektorienterade applikationer d2, förel. 10 S/M 9876 multicast-adress 234.235.236.237 S/M 9876 multicast-adress 234.235.236.237 data… 234.235.236.237 9876 data… 234.235.236.237 9876 data… 234.235.236.237 9876 data… 234.235.236.237 9876 S/M 9876 multicast-adress 234.235.236.237 S/M 9876 multicast-adress 234.235.236.237 Mottagaren tar själv emot meddelandet © Uno Holmer, DIT, Chalmers, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

Exempel: Skicka ett Multicast-datagram Objektorienterade applikationer d2, förel. 10 Exempel: Skicka ett Multicast-datagram MulticastSocket sock = new MulticastSocket(9876); iAddr = InetAddress.getByName(234.235.236.237); 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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3

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, 2018-12-02 www.cse.chalmers.se/~holmer/ DAT055, 17/18, lp 3