Chapter 6 Networking in Java

Download as pdf or txt
Download as pdf or txt
You are on page 1of 52

Course Title: Java Programming.

Credit Hour: 3 hrs.


ECTS: 5 [2 Lecture , 3 Lab and 2 Tutorial Hours]
Lecture Schedule: Every _____________

Bedasa Wayessa

Java Programming CoSc3053 1


Chapter 6
Networking in Java

CS@AmboU Advanced Programming - Comp 511 2


Objectives
 Networking overview
– Types of connections
 Socket programming
– Socket, port and URI
– Implementing Socket programming
 Remote method invocation (RMI)
– Overview of RMI
– The RMI registry
– The remote Interface
– Implementing RMI

CS@AmboU Advanced Programming - Comp 511 3


Networking overview
 Network programming is a mechanisms by which software
running on two or more computational devices can exchange
messages
 Desktop Computers, PDAs, Mobile Telephones
 Java is a network centric programming language
 Java abstracts details of network implementation behind a standard
API.
 The term network programming refers to writing programs that
execute across multiple devices (computers), in which the devices are
all connected to each other using a network.

CS@AmboU Advanced Programming - Comp 511 4


Networking overview
 Networking package is java.net
– Socket-based communications
• Applications view networking as streams of data
• Connection-based protocol
• Uses TCP (Transmission Control Protocol
– Packet-based communications
• Individual packets transmitted
• Connectionless service
• Uses UDP (User Datagram Protocol)

CS@AmboU Advanced Programming - Comp 511 5


Protocols

Hi TCP connection
request
Hi
TCP connection
Got the reply
time? GET http://www.google.com
2:00
<file>
time

6
Internet Architecture Model

Application (HTTP, FTP) DATA

Transport (TCP,UDP) HEADER DATA

Network (IP) HEADER HEADER DATA

Link (LINK) HEADER HEADER HEADER DATA

7
Networking Basics
 Applications Layer
 Standard apps
.  HTTP
 FTP TCP/IP Stack
 Telnet The java.net
package provides Application
 User apps
support for the (http,ftp,telnet,…)
 Transport Layer two common
 TCP network Transport
 UDP protocols (TCP, UDP,..)
 Programming Interface:
 Sockets
Network
 Network Layer
(IP,..)
 IP Link
 Link Layer (device driver,..)
 Device drivers

CS@AmboU Advanced Programming - Comp 511 8


Networking Basics
 TCP (Transport Control
.
Protocol) is a connection-oriented
TCP/IP Stack
protocol that provides a reliable
Application
flow of data between two (http,ftp,telnet,…)
computers. Transport
(TCP, UDP,..)
 Example applications:
Network
 HTTP (IP,..)
Link
 FTP (device driver,..)
 Telnet

CS@AmboU Advanced Programming - Comp 511 9


Networking Basics
 UDP (User Datagram Protocol)
. is a protocol that sends
TCP/IP Stack
independent packets of data,
Application
called datagrams, from one (http,ftp,telnet,…)
computer to another with no Transport
(TCP, UDP,..)
guarantees(unreliable) about
Network
arrival. (IP,..)

 Example applications: Link


(device driver,..)
 Clock server

 Ping

CS@AmboU Advanced Programming - Comp 511 10


Socket Programming
 Sockets provide the communication mechanism between two
computers using TCP.
 A client program creates a socket on its end of the communication
and attempts to connect that socket to a server.
 When the connection is made, the server creates a socket object on
its end of the communication.
 The client and the server can now communicate by writing to and
reading from the socket.
 The java.net.Socket class represents a socket, and the
java.net.ServerSocket class provides a mechanism for the server
program to listen for clients and establish connections with them.

CS@AmboU Advanced Programming - Comp 511 11


Socket Programming
 Socket programming can be connection-oriented or connectionless.
 Socket and ServerSocket classes are used for connection-
oriented socket programming.
 The client in socket programming must know two information:
– IPaddress of Server, and Port number.

CS@AmboU Advanced Programming - Comp 511 12


Socket class
 A socket is simply an endpoint for communications between the
machines.
 The Socket class can be used to create a socket.
 Commonly used methods of Socket class:
– public InputStream getInputStream()
– public OutputStream getOutputStream()
– public synchronized void close()

CS@AmboU Advanced Programming - Comp 511 13


Socket class
 Four steps to create a simple client in Java
– Create a Socket object for the client
– Obtain Socket’s InputStream and Outputstream
– Process information communicated
– Close streams and Socket

CS@AmboU Advanced Programming - Comp 511 14


ServerSocket class
 The ServerSocket class can be used to create a server socket.
 This object is used to establish communication with the clients.
 Commonly used methods of ServerSocket class:
– public Socket accept()
– public InputStream getInputStream()
– public OutputStream getOutputStream()
– public synchronized void close()

CS@AmboU Advanced Programming - Comp 511 15


ServerSocket class
 Five steps to create a simple server in Java
– ServerSocket object
• Registers an available port and a maximum number of clients
– Each client connection handled with Server object
• Server blocks until client connects
– Sending and receiving data
• OutputStream to send and InputStream to receive data
• Methods getInputStream and getOutputstream
– Use on Socket object
– Process phase
• Server and Client communicate via streams
– Close streams and connections
CS@AmboU Advanced Programming - Comp 511 16
Example of Socket Programming:
//MyServer.java
import java.io.*;
.import java.net.*;
public class MyServer {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();//establishes connection
DataInputStream dis=new DataInputStream(s.getInputStream());
String str=(String)dis.readUTF();
System.out.println("message= "+str);
ss.close();

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

CS@AmboU Advanced Programming - Comp 511 17


Example of Socket Programming:
//MyClient.java
import java.io.*;
.import java.net.*;
public class MyClient {
public static void main(String[] args) {

try{
Socket s=new Socket("localhost",6666);
DataOutputStream dout=new DataOutputStream(s.getOutputStream());

dout.writeUTF("Hello Server");
dout.flush();
dout.close();
s.close();

}catch(Exception e){
System.out.println(e);
}
}
}
CS@AmboU Advanced Programming - Comp 511 18
URL class
 The URL class represents a URL.
 URL is an acronym for Uniform Resource Locator.
 It points to a resource on the World Wide Web.
– For example: http://www.javatpoint.com/sonoojaiswal/index.jsp
 A URL contains many information’s:
 Protocol: In this case, http is the protocol.
 Server name or IP Address:
 In this case, www.javatpoint.com is the server name.
 Port Number: It is an optional attribute.
 If we write http//ww.javatpoint.com:80/sonoojaiswal/ , 80 is the port
number.
 File Name or directory name:
 In this case, index.jsp is the file name.
CS@AmboU Advanced Programming - Comp 511 19
URL class
 Examples of protocols include HTTP, HTTPS, FTP, and File.
 The path is also referred to as the filename, and the host is also called
the authority.
 Commonly used methods of URL class:
 public String getProtocol(): it returns the protocol of the URL.
 public String getHost(): it returns the host name of the URL.
 public String getPort(): it returns the Port Number of the URL.
 public String getFile(): it returns the file name of the URL.

CS@AmboU Advanced Programming - Comp 511 20


URLDemo Example
//URLDemo.java
import java.io.*;
.
import java.net.*;
public class URLDemo{
public static void main(String[] args){
try{
URL url=new
URL("http://www.javatpoint.com/sonoojaiswal/index.jsp");
System.out.print("Protocol: "+url.getProtocol());
System.out.print("Host Name: "+url.getHost());
System.out.print("Port Number: "+url.getPort());
System.out.print("File Name: "+url.getFile());
}catch(Exception e){
System.out.println(e);
}
}
}

CS@AmboU Advanced Programming - Comp 511 21


URLConnection class
 The URLConnection class represents a communication link
between the URL and the application.
 This class can be used to read and write data to the specified
resource referred by the URL.
 How to get the object of URLConnection class:
 The openConnection() method of URL class returns the object of
URLConnection class.
 Syntax:
 public URLConnection openConnection() throws IOException{}

CS@AmboU Advanced Programming - Comp 511 22


URLConnection class
 Displaying all the data of a webpage by URLConnecton class:
 The URLConnection class provides many methods, we can display all
the data of a webpage by using the getInputStream() method.
 The getInputStream() method returns all the data of the specified
URL in the stream that can be read and displayed.

CS@AmboU Advanced Programming - Comp 511 23


URLDemo Example
//DisplayData.java
import java.io.*;
.import java.net.*;
public class DisplayData {
public static void main(String[] args){
try{
URL url=new URL("http://www.javatpoint.com/sonoojaiswal/");
URLConnection urlcon=url.openConnection();
InputStream stream=urlcon.getInputStream();
int i;
while((i=stream.read())!=-1){
System.out.print((char)i);
}
}catch(Exception e){
System.out.println(e);}
}
}
}

CS@AmboU Advanced Programming - Comp 511 24


InetAddress class
 The java.net.InetAddress class represents an IP address.
 The Inet Address class provides methods to get the IP of any host name.
 Commonly used methods of InetAddress class:
 public static InetAddress getByName(String host) throws
UnknownHostException: it returns the IP of the given host.
 public static InetAddress getLocalHost() throws
UnknownHostException: it returns the LocalHost IP and name.
 public String getHostName(): it returns the host name of the IP address.
 public String getHostAddress(): it returns the IP address in string format.

CS@AmboU Advanced Programming - Comp 511 25


InetDemo Example
//InetDemo.java
import java.io.*;
.import java.net.*;
public class InetDemo{

public static void main(String[] args){


try{

InetAddress ip=InetAddress.getByName("www.javatpoint.com");
System.out.println("Host Name: "+ip.getHostName());
System.out.println("IP Address: "+ip.getHostAddress());

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

CS@AmboU Advanced Programming - Comp 511 26


DatagramSocket and DatagramPacket
 java provides stream sockets and datagram sockets.
 With stream sockets, a process establishes a connection to another
process.
 While the connection is in place, data flows between the processes in
streams.
 Stream sockets are said to provide a connection-oriented service.
 The protocol used for transmission is the popular TCP (Transmission
Control Protocol).
 With datagram sockets, individual packets of information are
transmitted.
 UDP (User Datagram Protocol) is a connectionless service that does
not guarantee that packets will not be lost, duplicated or arrive out of
sequence.
CS@AmboU Advanced Programming - Comp 511 27
DatagramSocket class
 The DatagramSocket class represents a connection-less socket for
sending and receiving datagram packets.
 Datagram is basically an information but there is no guarantee of its
content, arrival or arrival time.
 The DatagramSocket and DatagramPacket classes are used for connection-
less socket programming.
 Commonly used Constructors of DatagramSocket class are:
– DatagramSocket() throws SocketException:
 it creates a datagram socket and binds it with the available Port Number
on the localhost machine.
– DatagramSocket(int port) throws SocketEeption:
 it creates a datagram socket and binds it with the given Port Number.
– DatagramSocket(int port, InetAddress address) throws SocketEeption:
 it creates a datagram socket and binds it with the specified port number and host address.
CS@AmboU Advanced Programming - Comp 511 28
DatagramPacket class
 The DatagramPacket is message that can be sent or received.
 If you send multiple packet, it may arrive in any order.
 Moreover, packet delivery is not guaranteed.
 Commonly used Constructors of DatagramPacket class are:
 DatagramPacket(byte[] barr, int length):
 it creates a datagram packet. This constructor is used to receive the
packets.
 DatagramPacket(byte[] barr, int length, InetAddress address, int port):
 it creates a datagram packet. This constructor is used to send the
packets.

CS@AmboU Advanced Programming - Comp 511 29


DatagramSocket
Example of Sending DatagramPacket by DatagramSocket

//DSender.java
import java.net.*;

public class DSender{


public static void main(String[] args) throws Exception {

DatagramSocket ds = new DatagramSocket();


String str = "Welcome java";

InetAddress ip = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(str.getBytes(),
str.length(), ip, 3000);

ds.send(dp);
ds.close();
}
}

CS@AmboU Advanced Programming - Comp 511 30


DatagramSocket
Example of Receiving DatagramPacket by DatagramSocket
//DReceiver.java
import java.net.*;
public class DReceiver{
public static void main(String[] args) throws Exception {

DatagramSocket ds = new DatagramSocket(3000);


byte[] buf = new byte[1024];

DatagramPacket dp = new DatagramPacket(buf, 1024);


ds.receive(dp);

String str = new String(dp.getData(), 0, dp.getLength());


System.out.println(str);

ds.close();
}
}

CS@AmboU Advanced Programming - Comp 511 31


Remote Method Invocation (RMI)
 RMI allows Java objects running on separate computers or in separate
processes to communicate with one another via remote method calls.
 RMI is based on a similar, earlier technology for procedural programming
called remote procedure calls (RPCs) developed in the 1980s.
 RPC allows a procedural program (i.e., a program written in C or another
procedural programming language) to call a function residing on another
computer as conveniently as if that function were part of the same program
running on the same computer.
 A goal of RPC was to allow programmers to concentrate on the required
tasks of an application by calling functions, while making the mechanism that
allows the application’s parts to communicate over a network transparent to
the programmer.

CS@AmboU Advanced Programming - Comp 511 32


Remote Method Invocation (RMI)
 RPC performs all the networking and marshaling of data (i.e., packaging of
function arguments and return values for transmission over a network).
 A disadvantage of RPC is that it supports a limited set of simple data types.
 Therefore, RPC is not suitable for passing and returning Java objects.
 RMI is Java’s implementation of RPC for Java-object-to-Java-object distributed
communication.
 Once a Java object registers as being remotely accessible (i.e., it is a remote
object), a client can obtain a remote reference to that object, which allows
the client to use that object remotely.
 The method call syntax is identical to the syntax for calling methods of other
objects in the same program.

CS@AmboU Advanced Programming - Comp 511 33


Remote Method Invocation (RMI)
 Distributed Systems:
 A distributed system is a collection of independent computers that
appears to its users as a single coherent system - computer (Tanenbaum
& Van Steen).
 This definition has two aspects:
1. Hardware: autonomous machines
2. Software: a single system view for the users
Distributed system can also be defined as a system designed to support the
development of applications and services which can exploit a physical
architecture consisting of multiple, autonomous processing elements that do
not share primary memory but cooperate by sending asynchronous messages
over a communication network (Blair & Stefani).
CS@AmboU Advanced Programming - Comp 511 34
Client/Server Model vs Distributed Object Model
 Client/Server Model
 The client/server model is a form of distributed computing in which one
program (the client) communicates with another program (the server) for the
purpose of exchanging information.
 In this model,
 both the client and server usually speak the same language -- a protocol that
both the client and server understand
 so they are able to communicate.
 While the client/server model can be implemented in various ways, it is
typically done using low-level sockets.
 Using sockets to develop client/server systems means that we must
design a protocol, which is a set of commands agreed upon by the client
and server through which they will be able to communicate.

CS@AmboU Advanced Programming - Comp 511 35


Client/Server Model vs Distributed Object Model
 Distributed Object Model
 A distributed object-based system is a collection of objects that isolates
the requesters of services (clients) from the providers of services
(servers) by a well defined encapsulating interface.
 In other words, clients are isolated from the implementation of services
as data representations and executable code.
 This is one of the main differences that distinguish the distributed object-
based model from the pure client/server model.
 In the distributed object-based model, a client sends a message to an
object, which in turns interprets the message to decide what service to
perform.
 The Java (RMI) is example of this model.

CS@AmboU Advanced Programming - Comp 511 36


RMI
 The most fundamental means of inter-object communication in Java is method
invocation.
 Mechanisms like the Java event model are built on simple method invocations
between objects in the same virtual machine.
 Java's Remote Method Invocation (RMI) is a mechanism that lets us get a
reference to an object on a remote host and use it as if it were in our own virtual
machine.
 It lets us invoke methods on remote objects, passing real Java objects as arguments
and getting real Java objects as returned values.
 RMI is a powerful tool that leverages Java object serialization, allowing you to
transparently work with objects on remote machines as if they were local.
 With RMI it is easy to write distributed applications in which clients and servers
work with each other's data as full-fledged Java objects, rather than streams or
packets of data.
CS@AmboU Advanced Programming - Comp 511 37
RMI
 The Genesis of an RMI Application:
 Developing a distributed application using RMI involves the following
steps:
1. Define a remote interface
2. Implement the remote interface
3. Develop the server
4. Develop a client
5. Generate Stubs and Skeletons, start the RMI registry, server,
and client

CS@AmboU Advanced Programming - Comp 511 38


RMI
 Remote and Non-Remote Objects:
 Before an object can be used with RMI, it must be serializable.
 But that's not sufficient.
 Remote objects in RMI are real distributed objects.
 As the name suggests, a remote object can be an object on a
different machine; it can also be an object on the local host.
 The term remote means that the object is used through a special
kind of object reference that can be passed over the network.
 Like normal Java objects, remote objects are passed by reference.

CS@AmboU Advanced Programming - Comp 511 39


RMI
 Remote and Non-Remote Objects:
 In RMI, the actual method invocations will happen on the remote
host, where the object resides.
 Non-Remote objects are simpler.
 The catch is that when you pass a nonremote object over the
network it is simply copied.
 So, they are passed by copy (as opposed to by reference).

CS@AmboU Advanced Programming - Comp 511 40


RMI
 Stubs and Skeletons
 Stubs and skeletons are used in the implementation of remote objects.
 When you invoke a method on a remote object (which could be on a
different host), you are actually calling some local code that serves as a
proxy for that object. This is the stub.
 The skeleton is another proxy that lives with the real object on its
original host.
 It receives remote method invocations from the stub and passes them to
the object.
 Stubs and skeletons for your remote objects are created by running the
rmic (RMI compiler) utility.
 After compiling your Java source files normally, you run rmic on the
remote object classesAdvanced
CS@AmboU as a second pass.
Programming - Comp 511 41
Remote Method Invocation (RMI)

CS@AmboU Advanced Programming - Comp 511 42


RMI
 Remote Interfaces:
 Remote objects are objects that implement a special remote interface
that specifies which of the object's methods can be invoked remotely.
 The remote interface must extend the java.rmi.Remote interface.
 Your remote object will implement its remote interface; as will the stub
object that is automatically generated for it.
 In the rest of your code, you should then refer to the remote object as
an instance of the remote interface - not as an instance of its actual class.
 Because both the real object and stub implement the remote interface,
they are equivalent as far as we are concerned (for method invocation).
 All methods in the remote interface must declare that they can throw
the exception java.rmi.RemoteException.

CS@AmboU Advanced Programming - Comp 511 43


RMI
 Remote Interfaces:
 This exception (actually, one of many subclasses to RemoteException)
is thrown when any kind of networking error happens:
 For example, the server could crash, the network could fail, or you
could be requesting an object that for some reason isn't available.
 Here's a simple example of the remote interface that defines the
behavior of RemoteObject.
 There are two methods that are used to calculate the sum and product.

import java.rmi.*;
public interface MyRemoteObject extends Remote{
public double sum(double num1, double num2) throws
RemoteException;
public double product(double num1, double num2) throws
RemoteException;
}
CS@AmboU Advanced Programming - Comp 511 44
RMI
 The UnicastRemoteObject class:
 The actual implementation of a remote object (not the interface we
discussed previously) will usually extend
java.rmi.server.UnicastRemoteObject.
 This is the RMI equivalent to the familiar Object class.
 When a subclass of UnicastRemoteObject is constructed, the RMI
runtime system automatically "exports" it to start listening for network
connections from remote interfaces (stubs) for the object.
 Here's a remote object class that implements the RemoteObject
interface.

CS@AmboU Advanced Programming - Comp 511 45


RMI
 The UnicastRemoteObject class:
import java.rmi.*;

public class MyRemoteObjectImpl implements MyRemoteObject


extends UnicastRemoteObject{

public double sum(double num1, double num2) throws


RemoteException{

//implementation of method here


}

public double product(double num1, double num2) throws


RemoteException{

//implementation of method here


}
}

CS@AmboU Advanced Programming - Comp 511 46


RMI
 The RMI Registry:
 The registry is the RMI phone book.
 You use the registry to look up a reference to a registered remote object on
another host.
 The registry is implemented by a class called Naming and an application called
rmiregistry.
 This application must be running on the local host before you start a Java
program that uses the registry.
 You can then create instances of remote objects and bind them to particular
names in the registry.
 (Remote objects that bind themselves to the registry sometimes provide a
main( ) method for this purpose.)
 A registry name can be anything you choose; it takes the form of a slash-
separated path.
CS@AmboU Advanced Programming - Comp 511 47
RMI
 The RMI Registry:
 When a client object wants to find your object, it constructs a special
URL with the rmi: protocol, the hostname, and the object name.
 On the client, the RMI Naming class then talks to the registry and
returns the remote object reference.

 Following there are four source codes. Check it out!

CS@AmboU Advanced Programming - Comp 511 48


RMI
//Code 1: The Remote Interface

import java.rmi.*;
public interface Addition extends Remote{

public int add(int a, int b) throws RemoteException;


}

//Code 2: The implementation of Remote Interface

import java.rmi.*;
import java.rmi.server.*;

public class AdditionImpl extends UnicastRemoteObject implements


Addition{

public AdditionImpl() throws RemoteException{}

public int add(int x, int y){


return x+y;
}
}
CS@AmboU Advanced Programming - Comp 511 49
RMI
 .
//Code 3: Server program

import java.rmi.*;
import java.io.*;
public class Server{

public static void main(String args[]) throws IOException{

AdditionImpl server = new AdditionImpl();

Naming.rebind("rmi://localhost/Addition",server);

System.out.println("Remote object has been successfully executed");


}
}

CS@AmboU Advanced Programming - Comp 511 50


RMI
.
//Code 4: Client Program

import java.rmi.*;
public class Client{
public static void main(String args[]){

try{
Addition addition =
(Addition)Naming.lookup("rmi://localhost/Addition");
System.out.println("The sum is: " + addition.add(90,80));

}catch(ConnectException e){
System.out.println("Unable to connect to server");
}
catch(Exception ex){
ex.printStackTrace();
}
}
}

CS@AmboU Advanced Programming - Comp 511 51


End of Chapter 6

Next: Java - Database connectivity

https://docs.oracle.com/en/java/

49

You might also like