Sunteți pe pagina 1din 20

HET715 Network Computing

Lecture 2 Internet Standards and Protocols

Objectives
TO INTRODUCE: IP addresses and Domain Name System (DNS) InetAddress class and associated methods Uniform Resource Identifier (URI), Uniform Resource Name (URN), Uniform Resource Locator (URL) Java URL class and associated methods

IP Addresses-IPv4
Computer locations on a IP network (including the internet) are given by an IP address

In IPv4, addresses are 32-bit numbers


There are 232 unique IP addresses in this representation (~4 billion) which is less than the population in the world (~6.5 billion) Written as 4 dot-separated 8-bit segments (quads) Example the IP address for www.swin.edu.au is 136.186.1.10

Continued

IP Addresses-IPv6
In IPv6, addresses are 128-bit numbers
We can now represent 2128 unique IP addresses Consists of 8 colon-separated 16-bit segments usually written as 8 blocks of 4 hexadecimal colon-separated digits Example the address for www.ipv6.com.cn is 2001:0250:02FF:0210:025:8BFF:FEDE:67C8 Leading zeros do not need to be written and a double colon (::) one of which may appear in any address could replace multiple zero blocks. Example FEDC:0000:0000:0000:00DC:0000:7076:0010 could be written as FEDC::DC:0:7076:10 In mixed networks of IPv6 and IPv4 the last four bytes of the IPv6 address can be written as an IPv4 dotted quad address. Example FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 could be written as FEDC:BA98:7654:3210:FEDC:BA98:118.84.50.16

Domain Naming System


In addition to an IP address, computers can have an easy-to-remember domain name Example www.swin.edu.au Domain Naming System (DNS) translates from domain name to IP address When an application requests data from a domain name It asks the DNS for the numeric IP Address It includes the numeric address with the request for data

Java Class InetAddress (Ex. 1 & 2)


The Java class InetAddress represents a network address. You can use it (or its method called getByName) to convert both ways between IP and domain name forms
InetAddress address1 = InetAddress.getByName(www.swin.edu.au);
address1.getHostAddress(); //returns IP 136.186.1.10

InetAddress address2 = InetAddress.getByName(136.186.1.10); address2.getHostName(); //returns DNS name www.swin.edu.au

Java Class InetAddress (Ex. 3)


In applications we create it is often desirable to retrieve the IP address and/or the name of the current machine
InetAddress address = InetAddress.getLocalHost(); address.getHostAddress(); address.getHostName(); //returns IP address as a string //returns DNS name

Alternatively we can just use the println method to print the entire address object via its toString() method
System.out.println(address); swin.edu.au/ 136.186.1.10 //displays something like

URI, URL and URN


Uniform Resource Identifier (URI) is a structured string of characters used to identify a name or a resource on the internet. Such identification enables interaction with representations of resources over a network using specific protocols A URI can be classified as a Uniform Resource Name (URN) which names a resource on a network (eg. A persons name). The resource may be a file, program, streaming media, or any other resource A URI can also be classified as a Uniform Resource Locator (URL) which locates a resource on a network. (eg. A persons address) ISBN 0486275574 cites unambiguously a specific edition of Shakespeare's play Romeo and Juliet , its URN. However, to find and read it one needs its location given by the URL: http://shakespeare.mit.edu/romeo_juliet/hakespear

URL Parts (1)


URLs are composed of up to five parts:
Scheme (protocol) Authority User Info (eg. username, password) Host (most common) Port Path Query String Fragment (Ref or Section) scheme://user@hostname:port/path/path?query#fragment
ftp://ben:benpassword@wuarchive.wustle.edu/ user info hostname https://www.motorcars.com.au:8080/viewContract?contractId=3456&sessionId=s180587668 port query string http://en.wikipedia.org/wiki/URL#Example:_HTTP_URLs scheme path fragment

URL Parts (2)


scheme://user@hostname:port/path/path?query#fragment

Schemes (protocols) identify the way the resource can be accessed & retrieved; eg. http, ftp, rmi
Authoriy
User info may include colon separated username and password credential of the client Host name identifies the host on which the resource resides Port is sometimes optional because most well known schemes have a

default port, eg. http 80 Path is a series of directory (folder) names, ending in a filename. The path doesnt need to represent a real file; it might be an object or operation name Query strings are heavily used in dynamic web systems to encode variables sent from the client, using the format parameter1=value1&parameter2=value2 Fragments are pointers to a part of a document or a file

URLs are not unique identifiers


URLs locate one resource or item on the internet, but they do not uniquely identify it; different URLs may point to the same underlying resource Two different hostnames may resolve to same web server:
http://www.swin.edu.au/ http://www.swinburne.edu.au/

Two paths may resolve to same file: http://www.swin.edu.au/staff/index.html http:// www.swin.edu.au/contact/../staff/index.html An RMI object registered/advertised under two names: rmi://localhost/Obj1 [Naming.rebind(Obj1, server)] rmi://localhost/Obj2 [Naming.rebind(Obj2, server)]

The Java Class URL


java.net.URL class is an abstraction of a Uniform Resource Locator such as http://www.swin.edu.au or ftp://ftp.mine.org/pub

It extends java.lang.Object and implements the java.io.Serializable interface and is a final class that cannot be subclassed thus:
public final class URL extends Object implements Serializable (final): mean you cannot extend this class when define its final.

The URL class is the simplest way for a Java program to locate and retrieve data from network
No need to worry about the details of protocol being used, format of data being retrieved or how to communicate with the server

You simply tell Java the URL and it gets the data for you
Standard Java can only handle a limited number of protocols and content types, however, this capability can be extended to handle more protocols and types of data

The Java Class URL


Think of URLs as objects (rather than just simple strings) with fields (protocol, hostname, port, path, query string and fragment) and methods Fields are set using the URL constructors URL objects are immutable so field values (once set) cant be changed, hence they are thread-safe

Field values can be retrieved using their respective get methods (getProtocol(), getHost(), getPort() etc.)
There are six constructors that can be used differing in information required though they all throw MalformedURLException if you try to form a URL with an unsupported protocol and may throw the same exception if the URL is syntactically incorrect

Creating a URL object


The simplest URL constructor just takes one string argument (the absolute URL) and creates a URL object
public URL(String url) throws MalformedURLException

Thus we can use this constructor to create a URL object as follows:


try { URL u = new URL("http://www.swin.edu.au/"); } catch (MalformedURLException ex) { System.err.println(ex); }

Testing for supported protocols (Ex. 5)


Which protocols does a particular virtual machine support?
import java.net.*; public class ProtocolTester { public static void main(String[] args) { // hypertext transfer protocol testProtocol("http://www.adc.org"); // secure http testProtocol("https://www.amazon.com/exec/obidos/order2/"); // file transfer protocol testProtocol("ftp://metalab.unc.edu/pub/languages/java/javafaq/"); // Simple Mail Transfer Protocol testProtocol("mailto:elharo@metalab.unc.edu"); testProtocol("file://metalab.unc.edu/pub/myfile.pdf");

protocol tester (cont.)


And the testProtocol method
private static void testProtocol(String url) { try { URL u = new URL(url); System.out.println(u.getProtocol( ) + " is supported"); } catch (MalformedURLException ex) { String protocol = url.substring(0, url.indexOf(':')); System.out.println(protocol + " is not supported"); } } } Final exam what the code do? Protocolsupport ed, http supported. Out put will depend on JVM

protocol tester (cont.)


When we compile and run ProtocolTester the result might look something like the following (the exact output will depend on the virtual machine being used)
% java ProtocolTester http is supported https is supported ftp is supported mailto is not supported file is supported

Splitting a URL to its parts (Ex. 6)


Using the appropriate methods of the URL class it is possible to split a URL object to its constituent parts

The methods to use include: getProtocol(), getFile(), getHost, getPort(), getPath(), getRef(), getAuthority(), getUserInfo(), getQuery()
import java.net.*;

public class URLSplitter {


public static void main(String args[]) { for (int i = 0; i < args.length; i++) { try { URL u = new URL(args[i]); System.out.println("The URL is " + u); System.out.println("The scheme is " + u.getProtocol( )); System.out.println("The user info is " + u.getUserInfo( ))

Retrieving data from a URL


Playing with URLs may be an interesting exercise but what is usually more exciting is the data they actually point to

The URL class has several methods designed to retrieve data from a location pointed to by a URL
public InputStream openStream( ) throws IOException public URLConnection openConnection( ) throws IOException public URLConnection openConnection(Proxy proxy) throws IOException public Object getContent( ) throws IOException public Object getContent(Class[] classes) throws IOException

These methods return the data found at the URL as an instance of different classes

Using the openStream method to retrieve data from a URL (Ex. 7)


This method connects to the resource refrenced by the URL performs necessary handshaking between client and server and returns an InputStream object from which data can be read Data received is raw: ASCII if you are reading an ASCII text file, HTML if you are reading an HTML file and binary image data if you are reading an image file an so on
try {
URL u = new URL("http://www.hamsterdance.com"); InputStream in = u.openStream( );

...
int c;
while ((c = in.read( )) != -1) System.out.write(c); } catch (IOException ex) { System.err.println(ex); }

S-ar putea să vă placă și