0% found this document useful (0 votes)
57 views37 pages

Java Network Programming Overview

The document discusses network programming concepts like socket programming and remote method invocation (RMI). It provides details on socket programming including server sockets, client sockets, and examples of an echo server and client. It then introduces RMI as a way to allow remote objects to be accessed like local objects. Key aspects of RMI architecture involve remote objects, stubs, skeletons, and the ability to call methods on remote objects similarly to local objects.

Uploaded by

Himaja Sivaraju
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
57 views37 pages

Java Network Programming Overview

The document discusses network programming concepts like socket programming and remote method invocation (RMI). It provides details on socket programming including server sockets, client sockets, and examples of an echo server and client. It then introduces RMI as a way to allow remote objects to be accessed like local objects. Key aspects of RMI architecture involve remote objects, stubs, skeletons, and the ability to call methods on remote objects similarly to local objects.

Uploaded by

Himaja Sivaraju
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 37

Network Programming

CS 3331
Fall 2009

CS 3331 1
Outline
 Socket programming
 Remote method invocation (RMI)

CS 3331 2
Socket Programming
 Sockets
 Ends points of two-way communications, i.e., logical connections
between hosts
 Can be used to send and receive data
 Supported by most languages and platforms
 Server vs. client sockets

sockets (end points)

logical connection

CS 3331 3
Socket Programming (Cont.)
 Server sockets
 Wait for requests to come in over the network
 Implemented by java.net.ServerSocket class
 Client sockets
 Used to send and receive data
 Can be thought of as a pair of input and output
streams
 Implemented by java.net.Socket class

CS 3331 4
Server vs. Client Sockets
 Server socket: waiting for connection requests
 Client socket: transmission of data

server socket

connection request

client socket

CS 3331 5
Server Sockets
 Creating and using server sockets
Constructors
ServerSocket(int port)
ServerSocket(int port, int backlog)

Methods Description
accept() Waits for a connection request and
returns a Socket
close() Stops waiting for requests from clients

CS 3331 6
Server Sockets (Cont.)
 Usage pattern
try {
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket incoming = server.accept(); // obtain a client socket
// handle client request by reading from and writing to the socket …
}
} catch (IOException e) {
// handle exception on creating a server socket
}

CS 3331 7
Client Sockets
 Creating client sockets
 On the client side, Socket(String host, int port)
 On the server side, accept() of ServerSocket
 Using client sockets

Methods Description
getInputStream() Returns an InputStream for receiving data
getOutputStream() Returns an OutputStream to send data
close() Closes the socket connection

CS 3331 8
Client Sockets (Cont.)
 Usage pattern
try {
Socket s = new Socket(“iguana.cs.utep.edu”, 8888);
PrintWriter out = new PrinterWriter(
new OutputStreamWriter(s.getOutputStream()));
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
// send and receive data by using out and in …
in.close();
out.close();
s.close();
} catch (IOException e) {
// handle exception …
}

CS 3331 9
Example -- A Simple Echo Server
import java.io.*;
import java.net.*;
public class EchoServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8008);
while (true) {
Socket s = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(
s.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(
s.getOutputStream()));
<<handle client by using in and out>>
s.close();
}
} catch (Exception e) { e.printStackTrace(); }
}
}

CS 3331 10
Echo Server (Cont.)
<<handle client by using in and out>>=

out.print(“Hello! This is the Java EchoServer. ”);


out.println(“Enter BYE to exit.”);
out.flush();
String str = null;
while ((str = in.readLine()) != null) {
System.out.println(“Received: “ + str);
out.println(“Echo: “ + str);
out.flush();
if (str.trim().equals(“BYE”)) {
break;
}
}

CS 3331 11
Testing Echo Server
Testing with telnet client

aspect% telnet localhost 8008


Trying 127.0.0.1 …
Connected to localhost.
Escape character is ‘^]’.
Hello! This is the Java EchoServer. Enter BYE to exit.
Hello?
Echo: Hello?
Where are you?
Echo: Where are you?
BYE
Echo: BYE
Connection to host lost.

CS 3331 12
A Simple Echo Client
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) {
String host = (args.length > 0 ? host = args[0] : “localhost”;
try {
Socket socket = new Socket(host, 8008);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));
<<send and receive data by using in and out>>
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

CS 3331 13
Echo Client (Cont.)
<<send and receive data by using in and out>>=
// send data to server
for (int i = 1; i <= 10; i++) {
System.out.println(“Sending: line “ + i);
out.println(“line “ + i);
out.flush();
}
out.println(“BYE”);
out.flush();
// receive data from server
String str = null;
while ((str = in.readLine()) != null) {
System.out.println(str);
}

CS 3331 14
Testing Echo Client
<<send and receive data by using in and out>>=
sspect% java EchoClient
Sending: line 1
Sending: line 2

Sending: line 10
Hello! This is Java EchoServer. Enter BYE to exit.
Echo: line 1
Echo: line 2

Echo: line 10
Echo: BYE

CS 3331 15
Echo Server Revisited
How to support multiple clients simultaneously?
import java.io.*;
import java.net.*;
public class MultiEchoServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8008);
while (true) {
Socket s = server.accept();
new ClientHandler(s).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
<<class ClientHandler>>
}

CS 3331 16
Multi Echo Server (Cont.)
<<class ClientHandler>>=
private static class ClientHandler extends Thread {
private Socket sock;
public ClientHandler(Socket sock) { this.sock = sock; }
public void run() {
BufferedReader in = new BufferedReader(new InputStreamReader(
sock.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(
sock.getOutputStream()));
out.println(“Hello! This is the Java EchoSever.\nEnter BYE to exit.”);
out.flush();
String str = null;
while ((str = in.readLine()) != null) {
out.println(“Echo: “ + str); out.flush();
if (str.trim().equals(“BYE”)) { break; }
}
}
}
CS 3331 17
Exercise – Time Server
Send the current local time to clients. (Use
Calendar.getInstance().getTime() to get the current time.)

public class TimeServer {

CS 3331 18
Exercise – Time Client
Take two arguments, host name and port number, and connect to
the host to find its current time, e.g., java TimeClient iguana 8888

public class TimeClient {

CS 3331 19
Outline
 Socket programming
 Remote method invocation (RMI)

CS 3331 20
Remote Method Invocation
 Why RMI?
 Insocket programming, programmers have to
make explicit connections between clients
and servers and manage data transmission.
 Thus, it’s hard and error-prone to write socket
programs.
 Can the connection and data transmission be
managed by JVM?

CS 3331 21
What’s RMI?
 Distributed programming model
 to allow objects residing on different hosts (remote objects) to be
manipulated as if they were all on the same host (local objects)
 RMI architecture
call
Client Server
return

1 6 3 4

Stub Skeleton
2
JVM JVM
5

CS 3331 22
Local vs. Remote Objects
 Local objects
 Objects accessible only within the local hosts
 Remote objects
 Objects accessible from remote hosts
 Instances of classes that implements a marker interface
java.rmi.Remote
 Property of remote objects
 Similar to local objects (arguments, downcasting, instanceof,
etc)
 Clients of remote objects interact with stubs
 Passing arguments and results for RMI calls
 Call by value for local objects (through serialization and
deserialization)
 Call by reference for remote objects

CS 3331 23
Locating Remote Objects
 RMI registry
 Directory service mapping RMI servers (or objects) to their names
 Server: register itself to make it available to remote clients
 Client: locate a server by looking up an RMI registry with a URL protocol
rmi, e.g.,
rmi://host:port/name
 The programming interface by the class java.rmi.Naming

Method Description
bind(name, obj) Bind obj to name
rebind(name, obj) Bind obj to name even if already bound
unbind(name) Remove the binding
lookup(url) Return object bound to url
list(url) Return a list of all bindings

CS 3331 24
Writing RMI Programs
1. Define a remote interface, e.g.,
public interface Service extends java.rmi.Remote {
public void doSomething(…) throws java.rmi.RemoteException;
// …
}
2. Define a service implementation class, e.g.,
public class ServiceProvider extends
java.rmi.server.UniCastRemoteObject
implements Service {
public void doSomething(…) throws java.rmi.RemoteException {
// …
}
// …
}

CS 3331 25
Writing RMI Programs (Cont.)
3. Create a server instance and register to an
RMI registry, e.g.,

Service server = new ServiceProvider(…);


java.rmi.Naming.bind(name, server);

4. Generate the stub and skeleton classes by


using the RMI compiler (rmic), e.g.,

% rmic ServiceProvider

The command produces:


ServiceProvider_Stub.class and ServiceProvider_Skel.class

CS 3331 26
Writing RMI Programs (Cont.)
5. Write a client program, e.g.,
java.rmi.Remote obj = java.rmi.Naming.lookup(name);
Service server = (Service) obj;

server.doSomething(…); // RMI call

CS 3331 27
Example -- A Simple Time Server
 Remote interface, TimeService
public interface TimeService extends java.rmi.Remote {
java.util.Date getTime() throws java.rmi.RemoteException;
}

 Server and client classes

CS 3331 28
A Server Class, TimeServer
import java.rmi.*;
improt java.util.*;
public class TimeServer extends java.rmi.server.UnicastRemoteObject
implements TimeService {
public TimeServer() throws RemoteException {}
public Date getTime() { return Calendar.getInstance().getTime(); }
public static void main(String [] args) {
try {
TimeServer server = new TimeServer();
Naming.rebind("TimeServer", server);
} catch (Exception e) {
e.printStackTrace();
}
}
}

CS 3331 29
A Client Class, TimeClient
import java.rmi.*;
improt java.util.*;
public class TimeClient {
public static void main(String [] args) {
try {
TimeService server =
(TimeService) Naming.lookup("rmi://localhost/TimeServer");
System.out.println(server.getTime());
} catch (Exception e) {
e.printStackTrace();
}
}
}

CS 3331 30
Compiling and Running
1. Compile the server and client programs, e.g.,
% javac TimeServer.java TimeClient.java TimeService.java
2. Generates the stubs and skeletons, e.g.,
% rmic TimeServer
3. Start the RMI registry on the server host, e.g.,
% rmiregistry &
4. Run the server on the server host, e.g.,
% java TimeServer &
5. Runt the client on the client host, e.g.,
% java TimeClient

CS 3331 31
Serialization
 What is it?
 Process of transforming an object into a stream of bytes; the reverse
process is called deserialization.
 Allows objects to be saved to files or sent to remote hosts over a
network (e.g., arguments to RMI calls)
 How to make objects serializable?
 By implementing the marker interface java.io.Serializable
 A default implementation for (de) serialization is automatically provided.
 Can customize the process by implementing readObject() and
writeObject() methods:

private void writeObject(java.io.ObjectOutputStream out)


throws IOException;
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;

CS 3331 32
Example
 Make the following class Student serializable
public class Student {
private String name;
private int score;
//@ private invariant 0 <= score && score <= 100;
private char grade;
//@ private invariant (* grade is one of ‘A’, …, ‘F’ *);
// …
}

 Answer 1:
public class Student implements Serializable {
// …
}
CS 3331 33
Example (Cont.)
 Answer 2:
public class Student implements Serializable {
// …
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.writeUTF(name);
out.writeInt(score);
out.writeChar(grade);
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
name = in.readUTF();
score = in.readInt();
grade = in.readChar();
}
}

CS 3331 34
Example (Cont.)
 Answer 3:
public class Student implements Serializable {
// …
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.writeUTF(name);
out.writeInt(score);
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
name = in.readUTF();
score = in.readInt();
grade = calculateGrade(score);
}
private char calculateGrade(int score) { /* … */ }
}

CS 3331 35
Using Serialization
 Serializaing objects
ObjectOutputStream out = new ObjectOutputStream(/* … */);
Student s = new Student(/* … */);
out.writeObject(s);
// …
 Deserializing objects
ObjectInputStream in = new ObjectInputStream(/* … */);
Object obj = in.readObject();
Student s = (Student) obj;
// …

CS 3331 36
 For More materials,previous papers,text
books & many more visit
www.jntuworld.com

CS 3331 37

You might also like