Multiplexing AND Multithreaded Programming in Java

Download Report

Transcript Multiplexing AND Multithreaded Programming in Java

Multiplexing/Demux
Multiplexing/demultiplexing
Multiplexing at send host:
gathering data from multiple
sockets, enveloping data with
header (later used for
demultiplexing)
Demultiplexing at rcv host:
delivering received segments
to correct socket
= socket
application
transport
network
link
= process
P3
P1
P1
application
transport
network
P2
P4
application
transport
network
link
link
physical
host 1
physical
host 2
physical
host 3
CPSC 441 - Transport Layer
3-2
How demultiplexing works
 host receives IP datagrams
each datagram has source
IP address, destination IP
address
 each datagram carries 1
transport-layer segment
 each segment has source,
destination port number
 host uses IP addresses & port
numbers to direct segment to
appropriate socket

32 bits
source port #
dest port #
other header fields
application
data
(message)
TCP/UDP segment format
CPSC 441 - Transport Layer
3-3
Connectionless demultiplexing
 Create sockets with port
numbers:
DatagramSocket mySocket1 = new
DatagramSocket(12534);
DatagramSocket mySocket2 = new
DatagramSocket(12535);
 UDP socket identified by
two-tuple:
(dest IP address, dest port number)
 When host receives UDP
segment:


checks destination port
number in segment
directs UDP segment to
socket with that port
number
 IP datagrams with
different source IP
addresses and/or source
port numbers directed
to same socket
CPSC 441 - Transport Layer
3-4
Connectionless demux (cont)
DatagramSocket serverSocket = new DatagramSocket(6428);
P2
SP: 6428
SP: 6428
DP: 9157
DP: 5775
SP: 9157
client
IP: A
P1
P1
P3
DP: 6428
SP: 5775
server
IP: C
DP: 6428
Client
IP:B
SP provides “return address”
CPSC 441 - Transport Layer
3-5
Connection-oriented demux
 TCP socket identified
by 4-tuple:




source IP address
source port number
dest IP address
dest port number
 recv host uses all four
values to direct
segment to appropriate
socket
 Server host may support
many simultaneous TCP
sockets:

each socket identified by
its own 4-tuple
 Web servers have
different sockets for
each connecting client

non-persistent HTTP will
have different socket for
each request
CPSC 441 - Transport Layer
3-6
Connection-oriented demux
(cont)
P1
P4
P5
P2
P6
P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
SP: 9157
client
IP: A
DP: 80
S-IP: A
D-IP:C
SP: 9157
server
IP: C
DP: 80
S-IP: B
D-IP:C
Client
IP:B
CPSC 441 - Transport Layer
3-7
Connection-oriented demux:
Threaded Web Server
P1
P2
P4
P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
SP: 9157
client
IP: A
DP: 80
S-IP: A
D-IP:C
SP: 9157
server
IP: C
DP: 80
S-IP: B
D-IP:C
Client
IP:B
CPSC 441 - Transport Layer
3-8
Java Threads
Introduction
 TCP echo server shown in earlier tutorial
handles one client at a time.
 This server is known as iterative server.
 Iterative servers handle clients
sequentially, finishing with one client
before servicing the next.
 Java threads: Helps servers handle many
client simultaneously.
Threading Mechanisms
 Create a class that extends the Thread
class
 Create a class that implements the
Runnable interface
Thread
MyThread
(objects are threads)
[a]
11
Runnable
MyClass
(objects with run() body)
[b]
Thread
1st method: Extending Thread class
 Create a class by extending Thread class and
override run() method:
class MyThread extends Thread
{
public void run()
{
// thread body of execution
}
}
 Create a thread:
MyThread thr1 = new MyThread();
 Start Execution of threads:
thr1.start();
 Create and Execute:
new MyThread().start();
12
Template
class MyThread extends Thread {
public void run() {
System.out.println(" this thread is running ... ");
}
}
class ThreadEx1 {
public static void main(String [] args ) {
MyThread t = new MyThread();
t.start();
}
}
13
2nd method: Threads by
implementing Runnable interface
 Create a class that implements the interface Runnable and
override run() method:
class MyThread implements Runnable
{
.....
public void run()
{
// thread body of execution
}
}
 Creating Object:
MyThread myObject = new MyThread();
 Creating Thread Object:
Thread thr1 = new Thread( myObject );
 Start Execution:
thr1.start();
14
Template
class MyThread implements Runnable {
public void run() {
System.out.println(" this thread is running ... ");
}
}
class ThreadEx2 {
public static void main(String [] args ) {
Thread t = new Thread(new MyThread());
t.start();
}
}
15
Example of Java Threads
ThreadExample implements Runnable
interface; it can be passed to the
public class ThreadExample implements Runnable {
constructor of Thread
private String greeting;
Each instance
public ThreadExample(String greeting) {
of
this.greeting = greeting;
Returns
ThreadExample
}
reference to
contains own
Returns
public void run( ) {
current thread
greeting
name of
while(true) {
string
thread as
System.out.println(Thread.currentThread( ).getName( ) + ": "+greeting);
string
try {
Suspend the
TimeUnit.MILLISECONDS.sleep(((long) Math.random( ) * 100));
thread; Thread
} catch(InterruptedException e) {
sleeps for random
}
amount of time.
}
1. Create new instance of
}
ThreadExample with different
public static void main(String [ ] args) {
greeting
new Thread(new ThreadExample(“Greeting 1")).start( );
2. Passes new instance to the
new Thread(new ThreadExample(“Greeting 2")).start( );
constructor of Thread.
new Thread(new ThreadExample(“Greeting 3")).start( );
3. Calls new Thread instance's
}
start()
}
Each thread independently executes run() of ThreadExample, while the
main thread terminates. Upon execution an interleaving of three
greeting messages is printed
Multithreaded Java Server
import java.io.*;
import java.net.*;
public class MultiThreadServer implements Runnable {
Socket csocket;
MultiThreadServer(Socket csocket) {
this.csocket = csocket;
}
public static void main(String args[]) throws
Exception {
ServerSocket ssock = new ServerSocket(1234);
System.out.println("Listening");
while (true) {
Socket sock = ssock.accept();
System.out.println("Connected");
new Thread(new MultiThreadServer(sock)).start();
}
}
public void run() {
try {
PrintStream pstream = new
PrintStream(csocket.getOutputStream());
for (int i = 100; i >= 0; i--) {
pstream.println(i + " counts");
}
pstream.close();
csocket.close();
} catch (IOException e) {
System.out.println(e);
}
}
}