Presentation laddar. Vänta.

Presentation laddar. Vänta.

Nätverkskommunikation

Liknande presentationer


En presentation över ämnet: "Nätverkskommunikation"— Presentationens avskrift:

1 Nätverkskommunikation
Programmering för Internet är relativt enkelt i Java: Stöd finns för hantering av resurser på Internet via URL-adresser Stöd för programmering av sockets för säkra punkt-till-punkt förbindelser Stöd för programmering av datagram, en form av icke-säker kommunikation

2 Klasser för nätverkspro-grammering finns i paketet java.net
Stöd för hantering av standard-protokoll och möjlighet till definiering av egna protokoll Klasser för nätverkspro-grammering finns i paketet java.net

3 URL-kommunikation URL-Uniform Resource Locator
En adress för en resurs på Internet Adressen specificerar både protokoll, dator (host), ev. port och katalogposition Resursen kan bestå av en web-sida, grafik, video-snutt etc. Ett skapat URL-objekt kan användas för kommunikation

4 Exempel Skapa URL-objekt:
try { URL url = new URL(”htttp:// URL urlrel = new URL(url, ”logo.gif”); } catch (MalformedURLException e) // Felaktig URL Ännu har ingen kontakt skapats, men man kan enkelt: Koppla in/ut-strömmar till URL Hämta info om fil; fillängd, senast ändrad,skapad, typ etc. Ladda ner kopia av filen

5 Ladda ner html-fil mm. import java.io.*; import java.net.*;
public class URLTest { public static void main(String[] args) { try { // Skaffa URL-obj, ansluta URL url = new URL(" URLConnection uc = url.openConnection(); uc.connect(); // Hämta fillängd int length = uc.getContentLength(); System.out.println("Fillängd: " + length); // Skapa strömmar, kopiera html-filen InputStream in = uc.getInputStream(); FileOutputStream out = new FileOutputStream("Kopierad.html"); int i = 0; while ((i=in.read()) >= 0) { out.write((byte) i); } in.close(); out.close(); catch (MalformedURLException e) {;} catch (IOException ee) {;} } // main()

6 Datagram, UDP Datagram använder UDP-protokollet (alltså ej TCP!)
Snabbt men mera osäkert Ingen kontroll av att det sända kommer fram, om det kommer fram i rätt ordning Kan användas t ex för över-föring av real-time audio, video, utsändning av aktiekurser etc.

7 Möjlighet finns att skicka meddelanden till flera mottagare på en gång (mulicast)
Speciell, s.k. multicast-socket skapas Meddelanden sänds till en fiktiv multicast-adress som mottagarna avlyssnar T ex kan enkla chat-program skapas med denna teknik (lämpligt med trådning!)

8 Uppkopplade förbindelser, TCP
Används vid Client/Server programmering Datagram: Brevförbindelse Client/Server: Telefonförbindelse Förbindelsen säkerställer att meddelandena kommer fram på ett korrekt sätt

9 Allmänt om client/server
Servern tillhandahåller en tjänst: , databas, ftp, web etc. Servern är ”bestämd” genom datorns ip-adress och servens port-nummer Servern lyssnar efter anrop, clienter från andra datorer söker upp tjänster Trådade servrar kan hantera flera clienter samtidigt, ta emot meddelanden samtidigt som svar sänds etc.

10 Server En serversocket skapas genom Serversocket s = new ServerSocket(port); Socket s avlyssnar nu den angivna porten, inget mera händer… Om en client anropar s kan en ”riktig” socket skapas genom Socket conn = s.accept(); Nästa steg: koppla in- och utström till denna socket: DataInputStream in = new DataInputStream(conn.getInputStream()); DataOutputStream out = new DataOutputStream(conn.getOutputStream());

11 Mycket enkel server import java.net.*; import java.io.*;
public class SimpleServer { public static void main(String[] args) { int port = 4466; Socket con = null; String input = null; BufferedReader in = null; OutputStreamWriter out = null; try { ServerSocket server = new ServerSocket(port); con = server.accept(); in = new BufferedReader(new InputStreamReader( con.getInputStream())); out = new OutputStreamWriter( con.getOutputStream()); input = in.readLine(); out.write("You wrote: " + input + "\r\n"); out.flush(); } // try catch (IOException e) {;} finally { if (con != null) con.close(); } } // finally } // main() } // class SimpleServer

12 Test av server via Telnet
Förbindelsen öppnas från Telnet SimpleServer svarar på anrop Intern ip-beteckning: localhost/

13 Svagheter med servern Kan bara behandla en client åt gången
Åtgärd… Efter ett behandlat meddelande stänger den ner sig

14 Clienter Serversockets skapas via port-nummer, clientsockets via ip-adress och portnummer Exempel: Socket s = new Socket("localhost", 4466); BufferedReader s_in = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter (s.getOutputStream()); String str = in.readLine(); // Läsa från nätet Inläsning från tangentbord: BufferedReader tangent_in = new BufferedReader (new InputStreamReader(System.in));

15 Enkel client Anpassad till SimpleServer
import java.io.*; import java.net.*; public class SimpleClient { public static void main(String[] args) { String str = null; try { Socket s = new Socket("localhost", 4466); BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter (s.getOutputStream()); out.print("Hej server \r\n"); out.flush(); str = in.readLine(); System.out.println(str); } // try catch (IOException e) {System.out.println("No connection");} } // main } // Client

16 Fler möjligheter Få tag i Inet-adress: Ger svaret:
InetAddress adr = InetAddress.getByName ("www2.ite.mh.se"); Ger svaret: www2.ite.mh.se/ Få adress till anslutande client: String s = con.getInetAddress().toString(); // där con är serverns socket Egen adress fås genom: InetAddress.getLocalHost();

17 Serialization Utöver läsning/skivning av enkla, inbyggda typer kan även hela objekt behandlas. Inbyggda typer (int, double…) har alla bestämd längd Godtyckliga objekt har varierande längd, kan ha referenser till andra objekt… Genom serialisering kan data lagras och återskapas på fil, sändas över nätverk etc.

18 I Java kallas detta att serialisera objektet
Strömmarna ObjectInputStream och ObjektOutStream används Metoderna readObject() och writeObject() gör arbetet Exempel på skapande av strömmar: Socket con = server.accept(); OutputStream out = con.getOutputStream(); ObjectOutputStream out_obj = new ObjectOutputStream(out); InputStream in = con.getInputStream(); ObjectInputStream in_obj = new ObjectInputStream(in); // Läsa in obj: c = (C)in_obj.readObject(); //expl. typomv. Den klass C som objektet c tillhör måste dock implementera gränssnittet Serializable public class C implements Serializable

19 RMI ”Remote Method Invocation”, Javas motsvarighet till CORBA
Möjliggör anrop mellan distribuerade Javaobjekt i olika maskiner Metoder kan adresseras till att utföras på andra datorer RMI använder sig av serialisering,  objekt kan ingå i metodernas argumentlista

20 RMI kräver definition av Interface och, utöver vanlig kompilering, en särskild kompilering för att åstadkomma de stubb- och skelettklasser som krävs


Ladda ner ppt "Nätverkskommunikation"

Liknande presentationer


Google-annonser