ιαδικτυακές Εφαρµογές µε Java2 Στοιχεία ικτυακής Επικοινωνίας Όροι IP address 32bit αριθµός που χρησιµοποιείται από το Internet Protocol για την παράδοση δεδοµένων στο σωστό υπολογιστή στο δίκτυο. Port 16bit αριθµός που χρησιµοποιείται από το Transmission Control Protocol και το User Datagram Protocol για την παράδοση δεδοµένων στη σωστή εφαρµογή 1
Όροι Socket Είναι µια αµφίδροµη σύνδεση επικοινωνίας µεταξύ δύο εφαρµογών που τρέχουν στο δίκτυο. Ένα Socket αντιστοιχεί σε ένα Port σε έναν υπολογιστή. Χρησιµοποιείται ως τερµατικό σηµείο για την ανταλλαγή δεδοµένων µεταξύ δυο υπολογιστών. Socket address Σε κάθε Socket αντιστοιχεί µια διεύθυνση. Αυτή είναι ένας συνδυασµός της IP διεύθυνσης κι ενός αριθµού Port. Μια Socket address χαρακτηρίζει µοναδικά µια εφαρµογή στο δίκτυο. Όροι UDP User Datagram Protocol, είναι ένα πρωτόκολλο του στρώµατος µεταφοράς (transport layer) Datagram Καλείται ένα πακέτο του UDP. Είναι ένα ανεξάρτητο µικρού µεγέθους δεδοµένο που αποστέλλεται στο δίκτυο και δεν εγγυάται κανείς ούτε για την ακεραιότητα του περιεχοµένου του ούτε για τη λήψη του. 2
Ανάγνωση δεδοµένων URL URL: Uniform Resource Locator Αντιστοιχεί σε ένα δείκτη στον Παγκόσµιο Ιστό Παράδειγµα: http://rtsimage.di.uoa.gr/iakovidis/java.htm Ανάγνωση δεδοµένων URL import java.net.*; import java.io.*; import java.util.*; public class GetURLInfo { public static void printinfo(urlconnection u) throws IOException { // Display the URL address, and information about it. System.out.println(u.getURL().toExternalForm() + ":"); System.out.println(" Content Type: " + u.getcontenttype()); System.out.println(" Content Length: " + u.getcontentlength()); System.out.println(" Last Modified: " + new Date(u.getLastModified())); System.out.println(" Expiration: " + u.getexpiration()); System.out.println(" Content Encoding: " + u.getcontentencoding()); 3
Ανάγνωση δεδοµένων URL // Read and print out the first five lines of the URL. System.out.println("First five lines:"); DataInputStream in = new DataInputStream(u.getInputStream()); for(int i = 0; i < 5; i++) { String line = in.readline(); if (line == null) break; System.out.println(" " + line); Ανάγνωση δεδοµένων URL // Create a URL from the specified address, open a connection to it, // and then display information about the URL. public static void main(string[] args) throws MalformedURLException, IOException { URL url = new URL(args[0]); URLConnection connection = url.openconnection(); printinfo(connection); 4
Ανάγνωση δεδοµένων URL Παράδειγµα εξόδου: C:\WINDOWS\Desktop\Site>java GetURLInfo http://rtsimage.di.uoa.gr http://rtsimage.di.uoa.gr: Content Type: text/html Content Length: 489 Last Modified: Mon Jun 17 11:33:14 EEST 2002 Expiration: 0 Content Encoding: null First five lines: <html> <head> <title>rts Image</title> <meta http-equiv="content-type" content="text/html; charset=iso- 8859-7"> </head> Αποστολή Datagram Βήµα 1 Άνοιγµα ενός Datagram Socket ( ηµιουργία αντικειµένου Socket) Για αποστολή: DatagramSocket socket=new DatagramSocket(); 5
Αποστολή Datagram Βήµα 2 Προετοιµασία της αποστολής ενός UDP Datagram ( ηµιουργία αντικειµένου πακέτου) DatagramPacket datagram=new DatagramPacket(payload, size, address,port); String data = my message ; byte[] payload = data.getbytes(); size = payload.length; InetAddress address=inetaddress.getbyname("ip address"); int port = 2000; // ή όπου ακούει ο server Αποστολή Datagram Βήµα 3 Αποστολή του Datagram socket.send(datagram); Κλείσιµο του Socket (τέλος) 6
Αποστολή Datagram import java.io.*; import java.net.*; // This class sends the specified text as a datagram to port 6010 of the // specified host. public class UDPSend { static final int port = 6010; public static void main(string args[]) throws Exception { if (args.length!= 2) { System.out.println("Usage: java UDPSend <hostname> <message>"); System.exit(0); Αποστολή Datagram // Create a socket, and send the packet through it. DatagramSocket socket = new DatagramSocket(); // Get the internet address of the specified host InetAddress address = InetAddress.getByName(args[0]); // Convert the message to an array of bytes int msglen = args[1].length(); byte[] message = new byte[msglen]; args[1].getbytes(0, msglen, message, 0); // Initilize the packet with data and address DatagramPacket packet = new DatagramPacket(message, msglen, address, port); socket.send(packet); 7
Λήψη Datagram Βήµα 1 Άνοιγµα ενός Datagram Socket ( ηµιουργία αντικειµένου Socket) Για λήψη: DatagramSocket socket=new DatagramSocket(port); int port = 2000; // ή όποιο χρησιµοποιείται για να περιµένει τα πακέτα Λήψη Datagram Βήµα 2 Προετοιµασία της λήψης ενός UDP Datagram ( ηµιουργία αντικειµένου πακέτου) DatagramPacket datagram=new DatagramPacket(payload, size); byte[] payload = data.getbytes(); size = payload.length; String data = new String(payload, 0, 0, packet.getlength()); 8
Λήψη Datagram Βήµα 3 Λήψη του Datagram socket.receive(datagram); Κλείσιµο του Socket (τέλος) Λήψη Datagram import java.io.*; import java.net.*; // This program waits to receive datagrams sent to port 6010. // When it receives one, it displays the sending host and port, // and prints the contents of the datagram as a string. public class UDPReceive { static final int port = 6010; public static void main(string args[]) throws Exception { byte[] buffer = new byte[1024]; String s; 9
Λήψη Datagram // Create a socket to listen on the port. DatagramSocket socket = new DatagramSocket(port); for(;;) { // Create a packet with an empty buffer to receive data // Bug workaround: create a new packet each time through the loop. // If we create the packet outside of this loop, then it seems to // loose track of its buffer size, and incoming packets are // truncated. DatagramPacket packet = new DatagramPacket(buffer, buffer.length); Λήψη Datagram + + ":" + // Wait to receive a datagram socket.receive(packet); // Convert the contents to a string s = new String(buffer, 0, 0, packet.getlength()); // And display them System.out.println("UDPReceive: received from " packet.getaddress().gethostname() packet.getport() + ": " + s); 10