11894_unit2-6

Upload: pratyush

Post on 10-Jan-2016

216 views

Category:

Documents


0 download

DESCRIPTION

Networking

TRANSCRIPT

  • Networking

    InetAddress, TCP/IP Sockets

    Unit IINo. of Hours: 2

  • OSI and TCP/IP Layers

    ISO (International Standards Organization) has created a layered model, called the OSI (Open Systems Interconnect)

    TCP/IP (Transmission Control Protocol / Internet Protocol) already developed

  • Basic Networking Classes

    The J2SE documentation for java.net lists over 30 classes. A few of the key ones:

    InetAddress the class that represents IP addresses and

    contains operations for manipulating them

    continued

  • URL used to retrieve the Web page at the given URL

    URLConnection also used to retrieve a Web page allows extra parameters to be sent to the URL

    e.g HTTP request headers

    continued

    Basic Networking Classes

  • Socket the client-side socket class for TCP

    ServerSocket the server-side socket class for TCP

    DatagramSocket allows a client or server to send/receive UDP

    packets

    Basic Networking Classes

  • Finding an IP Address

    Javas InetAddress class makes the mapping between hostnames and IP addresses much easier than in UNIX.

    For details, look at the the documentation for java.net.InetAddress

  • InetAddress

    static InetAddress[] getAllByName(String host) Given the name of a host, returns an array of its IP

    addresses, based on the configured name service on the system. static InetAddress getByAddress(byte[] addr)

    Returns an InetAddress object given the raw IP address . static InetAddress getByAddress(String host, byte[] addr)

    Create an InetAddress based on the provided host name and IP address No name service is checked for the validity of the address.

    static InetAddress getByName(String host) Determines the IP address of a host, given the host's

    name. static InetAddress getLocalHost()

    Returns the local host.

  • InetAddress

    byte[] getAddress() Returns the raw IP address of this InetAddress object.

    String getHostAddress() Returns the IP address string in textual presentation.

    String getHostName() Gets the host name for this IP address.

    boolean isMulticastAddress() Utility routine to check if the InetAddress is an IP multicast

    address. Boolean isReachable(int timeout)

    Test whether that address is reachable.

  • WhatIP.javaimport java.io.*; import java.net.*; public class WhatIP { public static void main(String args[])

    throws IOException {

    InetAddress addr = InetAddress.getByName(machinename); System.out.println("Inet address is "+ addr); System.out.println("\naddr.getHostName():: " +

    addr.getHostName());System.out.println("\naddr.getLocalHost() :: " +

    addr.getLocalHost());System.out.println("\naddr.getAddress() :: " +

    addr.getAddress());System.out.println("\naddr.isMulticastAddress() :: " +

    addr.isMulticastAddress());}

    }

  • Output

  • Sockets

    Sockets provide an interface for programming networks at the transport layer.

    Network communication using Sockets is very much similar to performing file I/O In fact, socket handle is treated like file handle. The streams used in file I/O operation are also applicable to

    socket-based I/O Socket-based communication is programming language

    independent. That means, a socket program written in Java language can also

    communicate to a program written in Java or non-Java socket program.

  • Socket Communication

    A server (program) runs on a specific computer and has a socket that is bound to a specific port. The server waits and listens to the socket for a client to make a connection request.

    server ClientConnection requestport

  • Socket Communication

    If everything goes well, the server accepts the connection. Uponacceptance, the server gets a new socket bounds to a different port. It needs a new socket (consequently a different port number) so that it can continue to listen to the original socket for connection requests while serving the connected client.

    server

    ClientConnection

    port

    port po

    r

    t

  • Sockets and Java Socket Classes

    A socket is an endpoint of a two-way communication link between two programs running on the network.

    A socket is bound to a port number so that the TCP layer can identify the application that data destined to be sent.

    Javas .net package provides two classes: Socket for implementing a client ServerSocket for implementing a server

  • ServerSocket

    public class ServerSocket extends ObjectThis class implements server sockets. A server socket

    waits for requests to come in over the network. It performs some operation based on that request, and then possibly returns a result to the requester.

    The actual work of the server socket is performed by an instance of the SocketImpl class. An application can change the socket factory that creates the socket implementation to configure itself to create sockets appropriate to the local firewall.

  • ServerSocket

    Socket accept() Listens for a connection to be made to this socket and accepts it.

    Void bind(SocketAddress endpoint) Binds the ServerSocket to a specific address (IP address and port number).

    Void close() Closes this socket.

    ServerSocketChannel getChannel() Returns the unique ServerSocketChannel object associated with this socket, if any.

    InetAddress getInetAddress() Returns the local address of this server socket.

    int getLocalPort() Returns the port on which this socket is listening.

    SocketAddress getLocalSocketAddress() Returns the address of the endpoint this socket is bound to, or null if it is not bound

    yet. Int getReceiveBufferSize()

    Gets the value of the SO_RCVBUF option for this ServerSocket, that is the proposed buffer size that will be used for Sockets accepted from this ServerSocket.

    Boolean getReuseAddress() Tests if SO_REUSEADDR is enabled.

  • ServerSocket

    Int getSoTimeout() Retrieve setting for SO_TIMEOUT.protected

    Void implAccept(Socket s) Subclasses of ServerSocket use this method to override accept() to return their own subclass of

    socket. Boolean isBound()

    Returns the binding state of the ServerSocket. Boolean isClosed()

    Returns the closed state of the ServerSocket. Void setPerformancePreferences(int connectionTime, int latency, int bandwidth)

    Sets performance preferences for this ServerSocket. Void setReceiveBufferSize(int size)

    Sets a default proposed value for the SO_RCVBUF option for sockets accepted from this ServerSocket.

    Void setReuseAddress(boolean on) Enable/disable the SO_REUSEADDR socket option.static

    Void setSocketFactory(SocketImplFactory fac) Sets the server socket implementation factory for the application.

    Void setSoTimeout(int timeout) Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds.

    String toString() Returns the implementation address and implementation port of this socket as a String.

  • Socket

    public class Socket extends Object This class implements client sockets (also

    called just "sockets"). A socket is an endpoint for communication between two machines.

    The actual work of the socket is performed by an instance of the SocketImpl class. An application, by changing the socket factory that creates the socket implementation, can configure itself to create sockets appropriate to the local firewall.

  • Socket

    void bind(SocketAddress bindpoint) Binds the socket to a local address.

    Void close() Closes this socket.

    Void connect(SocketAddress endpoint) Connects this socket to the server.

    Void connect(SocketAddress endpoint, int timeout) Connects this socket to the server with a specified timeout value.

    SocketChannel getChannel() Returns the unique SocketChannel object associated with this socket, if any.

    InetAddress getInetAddress() Returns the address to which the socket is connected.

    InputStream getInputStream() Returns an input stream for this socket.

    Boolean getKeepAlive() Tests if SO_KEEPALIVE is enabled.

    InetAddress getLocalAddress() Gets the local address to which the socket is bound.

    int getLocalPort() Returns the local port to which this socket is bound.

    SocketAddress getLocalSocketAddress() Returns the address of the endpoint this socket is bound to, or null if it is not bound yet.

  • Socket

    Void setReceiveBufferSize(int size) Sets the SO_RCVBUF option to the specified value for this

    Socket. Void setReuseAddress(boolean on)

    Enable/disable the SO_REUSEADDR socket option. Void setSendBufferSize(int size)

    Sets the SO_SNDBUF option to the specified value for this Socket.static

    Void setSocketImplFactory(SocketImplFactory fac) Sets the client socket implementation factory for the application.

    Void shutdownInput() Places the input stream for this socket at "end of stream".

    Void shutdownOutput() Disables the output stream for this socket.

    String toString() Converts this socket to a String.

  • Java SocketsServerSocket(1234)

    Socket(128.250.25.158, 1234)

    Output/write stream

    Input/read stream

    It can be host_name like google.com

    Client

    Server

  • Implementing a Server

    1. Open the Server Socket:ServerSocket server; DataOutputStream os;DataInputStream is;server = new ServerSocket( PORT );

    2. Wait for the Client Request:Socket client = server.accept();

    3. Create I/O streams for communicating to the clientis = new DataInputStream( client.getInputStream() );os = new DataOutputStream( client.getOutputStream() );

    4. Perform communication with clientReceive from client: String line = is.readLine(); Send to client: os.writeBytes("Hello\n");

    5. Close sockets: client.close();

  • Implementing a Client

    1. Create a Socket Object:client = new Socket( server, port_id );

    2. Create I/O streams for communicating with the server.is = new DataInputStream(client.getInputStream() );os = new DataOutputStream( client.getOutputStream() );

    3. Perform I/O or communication with the server: Receive data from the server:

    String line = is.readLine(); Send data to the server:

    os.writeBytes("Hello\n");4. Close the socket when done:

    client.close();

  • SimpleServer

    // SimpleServer.java: a simple server programimport java.net.*;import java.io.*;public class SimpleServer {public static void main(String args[]) throws IOException {// Register service on port 1234ServerSocket s = new ServerSocket(1234);Socket s1=s.accept(); // Wait and accept a connection// Get a communication stream associated with the socketOutputStream s1out = s1.getOutputStream();DataOutputStream dos = new DataOutputStream (s1out);// Send a string!dos.writeUTF("Hi there");// Close the connection, but not the server socketdos.close();s1out.close();s1.close();

    }}

  • SimpleClient

    // SimpleClient.java: a simple client programimport java.net.*;import java.io.*;public class SimpleClient {

    public static void main(String args[]) throws IOException {// Open your connection to a server, at port 1234Socket s1 = new Socket("lappu",1234);// Get an input file handle from the socket and read the inputInputStream s1In = s1.getInputStream();DataInputStream dis = new DataInputStream(s1In);String st = new String (dis.readUTF());System.out.println(st);// When done, just close the connection and exitdis.close();s1In.close();s1.close();

    }}

  • Output

  • Socket Exceptions

    try { Socket client = new Socket(host, port); handleConnection(client);

    } catch(UnknownHostException uhe) { System.out.println("Unknown host: " + host); uhe.printStackTrace(); } catch(IOException ioe) { System.out.println("IOException: " + ioe); ioe.printStackTrace(); }

  • ServerSocket

    & Exceptions

    public ServerSocket(int port) throws IOException Creates a server socket on a specified port. A port of 0 creates a socket on any free port. You can use

    getLocalPort() to identify the (assigned) port on which this socket is listening.

    The maximum queue length for incoming connection indications (a request to connect) is set to 50. If a connection indication arrives when the queue is full, the connection is refused.

    Throws: IOException - if an I/O error occurs when opening the socket. SecurityException - if a security manager exists and its

    checkListen method doesn't allow the operation.

    NetworkingOSI and TCP/IP LayersBasic Networking ClassesBasic Networking ClassesBasic Networking ClassesFinding an IP AddressInetAddressInetAddressWhatIP.javaOutputSocketsSocket CommunicationSocket CommunicationSockets and Java Socket ClassesServerSocketServerSocketServerSocketSocketSocketSocketJava SocketsImplementing a ServerImplementing a ClientSimpleServerSimpleClientOutputSocket ExceptionsServerSocket & Exceptions