NETWORKING IN JAVA java PACKAGE

39
NETWORKING IN JAVA java.net PACKAGE

description

NETWORKING IN JAVA java.net PACKAGE. Programming with Sockets Developing a TCP Client Developing a TCP Server Client/Server Applications using UDP Writing a Multithreaded Server Network Application Programming Techniques Multi-Protocol Programming using URLs Passing Java Objects - PowerPoint PPT Presentation

Transcript of NETWORKING IN JAVA java PACKAGE

Page 1: NETWORKING IN JAVA java   PACKAGE

NETWORKING IN JAVA

java.net PACKAGE

Page 2: NETWORKING IN JAVA java   PACKAGE

Programming with Sockets Developing a TCP Client Developing a TCP Server Client/Server Applications using UDP Writing a Multithreaded Server Network Application Programming Techniques Multi-Protocol Programming using URLs Passing Java Objects JSSE - Java Secure Socket Extension JavaRMI JavaRMI Architecture Programming with RMI

Page 3: NETWORKING IN JAVA java   PACKAGE

Java Sockets What is Socket?

A socket is a communication endpoint an object through which an application sends or receives packets of data

across a network. The purpose is to abstract away the underlining network

Internet protocol (IP) is a low-level routing protocol that breaks data into small packets and send them to an address across a network It does not guarantee to deliver said packages in to the destination

Transmission Control Protocol (TCP) is a higher- level protocol that manages to robustly string together these packets, sorting and retransmitting them as necessary to reliably transmit the data.

UserDatagram Protocol (UDP) is a third protocol can be used directly to support fast, connectionless, unreliable transport of packets

Page 4: NETWORKING IN JAVA java   PACKAGE

A server runs on a specific computer and has a socket that is bound to a specific port number.

A client makes a connection request based on the host name of the server and the port number.

Page 5: NETWORKING IN JAVA java   PACKAGE

In acceptance case, the server gets a new socket bound to a different port.

If the connection is accepted, a socket is successfully created and the client can use the socket to communicate with the server.

Page 6: NETWORKING IN JAVA java   PACKAGE

JAVA Socket Programming

Client sideSocket

This class implements client socketsA socket is an endpoint for communication between

two machines

Server sideServerSocket

This 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.

Page 7: NETWORKING IN JAVA java   PACKAGE

Sequence of Operations for a TCP Socket

Communication ServerCreate a server socket

Start listening on a port

Create a new socketAccept connection

Sending & Receiving

ClientCreate the socket

Seek a connection

Sending & Receiving

Page 8: NETWORKING IN JAVA java   PACKAGE

Opening a Socket while programming a client

Socket MyClient;MyClient = new Socket ("Machine name", PortNumber);

Machine name is the machine we are trying to open a connection to

PortNumber is the port (a number) on which the server we are trying to connect to is running.

When selecting a port number, we should note that port numbers between 0 and 1023 are reserved for privileged users (that is, super user or root). These port numbers are reserved for standard services, such as email,

FTP, and HTTP. When selecting a port number for our server, we select one that is

greater than 1023

Page 9: NETWORKING IN JAVA java   PACKAGE

Reserved Sockets

Once connected , a higher level protocol proceeds, which is dependent on which we are using

TCP/IP reserves the lower 1024 ports for specific protocols.

Port Number 21 is for FTP 23 is for Telnet 25 is for e-mail 79 is for finger 80 is for HTTP, 119 is for netnews.

Page 10: NETWORKING IN JAVA java   PACKAGE

PORT NUMBERS (last updated 2003-12-22)

The port numbers are divided into three ranges: Well Known Ports are those from 0 through 1023Registered Ports are those from 1024 through

49151 Dynamic and/or Private Ports are those from 49152

through 65535

http://www.iana.org/assignments/port-numbers

Unassigned port numbers should not be used. The IANA will assign the number for the port after your application has been approved

Page 11: NETWORKING IN JAVA java   PACKAGE

The code that opens a socket while programming a client can

be written as follows by make use of exception handling:

Socket MyClient;try {          MyClient = new Socket("Machine

name", PortNumber);}catch (IOException e) {    System.out.println(e);}

Page 12: NETWORKING IN JAVA java   PACKAGE

Opening a socket while programming a server

ServerSocket MyService;try {   MyService = new ServerSocket (PortNumber);        }        catch (IOException e) {           System.out.println(e);        }

When implementing a server we also need to create a socket object from the ServerSocket in order to listen for and accept connections from clients.

Socket clientSocket = null;try {   serviceSocket = MyService.accept();        }catch (IOException e) {   System.out.println(e);}

Page 13: NETWORKING IN JAVA java   PACKAGE

Example

A client requests a single file, /index.html,

and the server relies that it has successfully

found the file and is sending it to the client

Page 14: NETWORKING IN JAVA java   PACKAGE

Server ClientListens to port 80 Connects to port 80.

Accepts the connection Writes “GET/index.html

HTTP/1.0\n\n”.

Reads up until the

second end-of-line(\n).

Sees that Get is a known command

and that HTTP/1.0 is a valid protocol version

Reads a local file called /index.html

Writes “HTTP/1.0 200 OK \ n \ n”. “200” means “here comes the file”

Copies the contents of the file Reads the contents of the file and displays it.

into the socket

Hangs up Hangs up

Page 15: NETWORKING IN JAVA java   PACKAGE

How do we create an input stream?

On the client side, we can use the DataInputStream class to create an input stream to receive response from the server:

DataInputStream input;try {   input = new DataInputStream(MyClient.getInputStream());}catch (IOException e) {   System.out.println(e);}

The class DataInputStream allows us to read lines of text and Java primitive data types in a portable way.

It has methods such as read, readChar, readInt, readDouble, and readLine,.

We can use any function which suits our needs depending on the type of data that we receive from the server.

Page 16: NETWORKING IN JAVA java   PACKAGE

How do we create an input stream?

On the server side, we can use DataInputStream to receive input from the client:

DataInputStream input;try {      input = new DataInputStream(serviceSocket.getInputStream());}catch (IOException e) {   System.out.println(e);}

Page 17: NETWORKING IN JAVA java   PACKAGE

How do we create an output stream? On the client side, we can create an output stream to send

information to the server socket using the class PrintStream or DataOutputStream of java.io:

PrintStream output;try {   output = new PrintStream(MyClient.getOutputStream());//Returns the OutputStream associated with the invoking socket

}catch (IOException e) {   System.out.println(e);}

The class DataOutputStream allows us to write Java primitive data types; many of its methods write a single Java primitive type to the output stream. The method writeBytes is a useful one.

Page 18: NETWORKING IN JAVA java   PACKAGE

How do we create an output stream?

On the server side, we can use the class PrintStream to send information to the client.

PrintStream output;try {   output = new PrintStream(serviceSocket.getOutputStream());}catch (IOException e) {   System.out.println(e);}

Page 19: NETWORKING IN JAVA java   PACKAGE

How do we close sockets? We should always close the output and input stream before you close the

socket. On the client side:

try {           output.close();           input.close();   MyClient.close();} catch (IOException e) {   System.out.println(e);}

On the server side: try {   output.close();   input.close();   serviceSocket.close();   MyService.close();} catch (IOException e) {   System.out.println(e);}

Page 20: NETWORKING IN JAVA java   PACKAGE

Client Side – Socket (summary)

Common methodsA socket can be examined at any time for the address and port informationassociated with it, by use of the following methods:

getInetAddress() - Returns the address to which the socket is connected

getInputStream() - Returns an input stream for this socket

getOutputStream() - Returns an output stream for this socket.

getPort() - Returns the remote port to which this socket is connected

getLocalPort() returns the local port to which this Socket object is connected.

close() – close this socket

Page 21: NETWORKING IN JAVA java   PACKAGE

Client Connection

PrintWriterPrint formatted representations of objects to a text-

output stream. It does not contain methods for writing raw bytes, for

which a program should use Unicode byte streams.

BufferReaderRead text from a character-input stream, buffering

characters so as to provide for the efficient reading of characters, arrays, and lines

Page 22: NETWORKING IN JAVA java   PACKAGE

Client Side – OperationOpen a socket

Send/receive data

close socket

Open input/output

stream

Client flows Open a socket. Open an input stream and output stream to the socket. Read from and write to the stream according to the server's protocol. Close the streams. Close the socket.

close streams

Page 23: NETWORKING IN JAVA java   PACKAGE

Client Sideimport java.io.*; import java.net.*;public class EchoClient {

public static void main(String[] args) throws IOException { Socket echoSocket = null;

PrintWriter out = null; BufferedReader in = null; try {

echoSocket = new Socket (“myComputer", 7); out = new PrintWriter (echoSocket.getOutputStream(), true);

in = new BufferedReader ( new InputStreamReader(

echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host: myComputer.");

System.exit(1); }

Page 24: NETWORKING IN JAVA java   PACKAGE

catch (IOException e) { System.err.println ("Couldn't get I/O for " + "the connection to:

myComputer."); System.exit(1);

}

BufferedReader stdIn = new BufferedReader( new InputStreamReader (System.in));

String userInput; while ((userInput = stdIn.readLine()) != null) {

out.println (userInput); System.out.println ("echo: " + in.readLine());

}

out.close(); in.close(); stdIn.close(); echoSocket.close(); }

}

Page 25: NETWORKING IN JAVA java   PACKAGE

Server Side

Server flows create a ServerSocket

No need to bind and listen, the constructor has already done that.

accept a client call Send/Receive data close socket

Page 26: NETWORKING IN JAVA java   PACKAGE

Server Side – Exampleimport java.net.*; class SimpleTCPServer { public static void main(String a[]) throws Exception; { ServerSocket acceptor = new ServerSocket (1111); System.out.println ("On port " + acceptor.getLocalPort()); while (true) { Socket client = acceptor.accpet(); // Do stuff here... client.close();} } }

Page 27: NETWORKING IN JAVA java   PACKAGE

import java.io.*;import java.net.*;

public class smtpClient { // smtpClient: client socket    public static void main(String[] args) {

     Socket smtpSocket = null;      DataOutputStream os = null ;//os: output stream    DataInputStream is = null; // is: input stream

// Initialization section:// Try to open a socket on port 25// Try to open input and output streams

        

Page 28: NETWORKING IN JAVA java   PACKAGE

try {    smtpSocket = new Socket ("hostname", 25)

os = new DataOutputStream(smtpSocket.getOutputStream()); is = new DataInputStream(smtpSocket.getInputStream());        } catch (UnknownHostException e) {

System.err.println("Don't know about host:

hostname");        } catch (IOException e) {            System.err.println("Couldn't get I/O for the

connection to: hostname");}        

Page 29: NETWORKING IN JAVA java   PACKAGE

// If everything has been initialized then we want to write some data// to the socket we have opened a connection to on port 25

if (smtpSocket != null && os != null && is != null) {            try {

// The capital string before each colon has a special meaning to SMTP// you may want to read the SMTP specification, RFC1822/3

os.writeBytes("HELO\n");                 os.writeBytes("MAIL From: [email protected]\n");                os.writeBytes("RCPT To: [email protected]\n");                os.writeBytes("DATA\n");                os.writeBytes("From: [email protected]\n");                os.writeBytes("Subject: testing\n");                os.writeBytes(“Okey \n"); // message body                os.writeBytes("\n.\n"); os.writeBytes("QUIT");

Page 30: NETWORKING IN JAVA java   PACKAGE

// keep on reading from/to t he socket till we receive the "Ok" from SMTP,// once we received that then we want to break.

      String responseLine;          while ((responseLine = is.readLine()) != null) {         System.out.println ("Server: " + responseLine);                    if (responseLine.indexOf ("Ok") != -1) {                      break;                    }                }

os.close();          is.close();          smtpSocket.close();               } catch (UnknownHostException e) {                System.err.println("Trying to connect to unknown host: " + e);            } catch (IOException e) {                System.err.println("IOException:  " + e);         

   }    }    }           }

Page 31: NETWORKING IN JAVA java   PACKAGE

Echo server Now let's write a server. This server is very similar to the echo server running on

port7. Basically, the echo server receives text from the

client and then sends that exact text back to the client.

This is just about the simplest server we can write. Note that this server handles only one client. We can modify it to handle multiple clients using

threads.

Page 32: NETWORKING IN JAVA java   PACKAGE

import java.io.*;import java.net.*;

public class echo3 {    public static void main(String args[]) {

// declaration section:// declare a server socket and a client socket for the server// declare an input and an output stream

        ServerSocket echoServer = null;        String line;        DataInputStream is;        PrintStream os;        Socket clientSocket = null;

// Try to open a server socket on port 9999// Note that we can't choose a port less than 1023 if we are not// privileged users (root)

        try {           echoServer = new ServerSocket (9999);        }        catch (IOException e) {           System.out.println(e);        }  

Page 33: NETWORKING IN JAVA java   PACKAGE

// Create a socket object from the ServerSocket to listen and accept // connections.//Open input and output streams

try {           clientSocket = echoServer.accept();           is = new DataInputStream(clientSocket.getInputStream());           os = new PrintStream(clientSocket.getOutputStream());

// As long as we receive data, echo that data back to the client.

           while (true) {             line = is.readLine();             os.println(line);            }        }   catch (IOException e) {           System.out.println(e);        }    }}

Page 34: NETWORKING IN JAVA java   PACKAGE

URLConnection

Page 35: NETWORKING IN JAVA java   PACKAGE

Creating a URL

try {

// With components.

URL url = new URL("http", "hostname", 80,

"index.html");

// With a single string.

url = new,

URL("http://hostname:80/index.html"); } ,

catch (MalformedURLException e) { }

Page 36: NETWORKING IN JAVA java   PACKAGE

Getting Text from a URLtry { // Create a URL for the desired page URL url = new URL("http://hostname:80/index.html"); // Read all the text returned by the server BufferedReader in =

new BufferedReader (new InputStreamReader (url.openStream())); String str; while ((str = in.readLine()) != null) { // str is one line of text;// readLine() strips the newline character(s) } in.close(); } catch (MalformedURLException e) { } catch (IOException e) { }

Page 37: NETWORKING IN JAVA java   PACKAGE

Getting an Image from a URL try {

// Create a URL for the image's location URL url = new URL("http://hostname:80/image.gif");

// Get the image

java.awt.Image image =

java.awt.Toolkit.getDefaultToolkit().createImage(url); }

catch (MalformedURLException e) { }

catch (IOException e) { }

Page 38: NETWORKING IN JAVA java   PACKAGE

Reference Web Links

Socket programming

http://java.sun.com/docs/books/tutorial/networking/

SMTP protocol:

http://www.ietf.org/rfc/rfc821.txt

Page 39: NETWORKING IN JAVA java   PACKAGE

Java Remote Method Invocation (Java RMI)

Java RMI enables the programmer to create distributed Java technology-based to Java technology-based applications the methods of remote Java objects can be invoked

from other Java virtual machines, possibly on different hosts.

RMI uses object serialization to marshal and unmarshal parameters and does not truncate types, supporting true object-oriented polymorphism

http://abra.sourceforge.net/doc/javadoc/org/ephman/abra/tools/Marshaller.html