Download ppt - CS

Document related concepts
no text concepts found
Transcript
Networking in Java
Representation and Management of
Data on the Internet
Client-Server Model
Port 80
Client application
132.65.32.29
Server application
64.208.34.100
www.google.com
Client application
132.68.7.11
Clients
• Client - initiates connection
–
–
–
–
retrieves data
displays data
responds to user input
requests more data
• Examples:
– Web Browser
– Chat Program
– PC accessing files
Servers
• Server - responds to connection
– receives request for data
– looks it up
– delivers it
• Examples:
– Web Server
– Database Server
– Domain Name Server
Networking Basics
• Communication layers:
Application (HTTP, FTP, Telnet)
Our Applications
Transport (TCP, UDF)
Network (IP)
Link (device, driver,…)
Internet Architecture Model
DATA
Application Layer
HEADER
DATA
HEADER
HEADER
DATA
HEADER
HEADER
DATA
Transport Layer
Internet Layer
Network Layer
HEADER
TCP and UDP
•
TCP (Transmission Control Protocol)
– connection-based protocol
– provides a reliable flow of data between two computers
• UDP (User Datagram Protocol)
– a protocol that sends independent packets of data,
called datagrams, from one computer to another
– arrival of datagrams is not gaurantees
– UDP is not connection-based like TCP
How to Choose TCP or UDP
• Use TCP when reliability is critical:
– HTTP
– FTP
– Telnet
• Use UDP when reliability is not critical:
–
–
–
–
Ping
Clock
Audio and Video transmission
NFS – Network File System
Host and Port
• Destination in the Internet is identified by
host + port
– a 32 bits IP-address
– a 16 bits port
• Q: Why don’t we specify the port in a Web
browser?
• Ports 0-1023 are restricted
– Do not use them
Destination of a Connection
• Q: How does an HTTP request ‘knows’
where is the server to which it is intended?
• Q: How does an HTTP response ‘knows’
where is the server to which it is intended?
• Q: There can be more then one application
(ever some servers) running on the same
host, how do we know to which application
a message is intended?
A Connection to Many
Applications
• Q: There can be many applications that are on the
same time connected to the same host,
(for example, many browser and one search engine)
How do we send the right transmission to each
client?
• A: By adding the IP address of the client and the
port of the client to the IP packets
Known Ports
Client Application
• Some known ports are
– 20, 21: FTP
– 23: telnet
– 25: SMTP
– 43: whois
– 80: HTTP
– 119: NNTP
mail client
21
23
25
web browser
43
80 119
Internet Addresses
• InetAddress – a final class that represents Internet
Protocol (IP) addresses and the names of hosts
• Getting the InetAdddress
– getLocalHost
• Returns the local host
– getByName(String host)
• For the given host name one of its IP addresses is
returned
– getAllByName(String host)
• For a given host name all its IP addresses are
returned
Methods of InetAddress
• getHostAddress
– Returns the IP address of the host
– The address is in the form “%d.%d.%d.%d”
• getHostName
– Returns the name of the host
Working with URLs
• URL (Uniform Resource Locator) - a
reference (an address) to a resource on the
Internet
http://www.cs.huji.ac.il:80/~dbi/main.html#notes
Protocol
Host
Name
Port
Number
File
Name
Reference
Creating URLs
• The class URL is defined in the package
java.net
• Basic constructor:
URL w3c = new URL("http://www.w3.org/");
• Relative links:
– Are created from baseURL + relativeURL
URL amaya = new URL(w3c, “Amaya/Amaya.html”);
URL jigsaw = new URL(w3c, “Jigsaw/#Getting”);
Creating URLs (cont.)
• The following two are equivalent:
URL dbiNotes = new
URL(“http://www.cs.huji.ac.il:80/” +
”~dbi/main.html#notes”);
URL dbiNotes = new URL(“http”,
“www.cs.huji.ac.il”, 80,
“~dbi/main.html#notes”);
• Construction of URLs can throw
MalformedURLException
Why Do We Need the URL
Class?
• The main usage of URL is for parsing URLs
–
–
–
–
–
getting the protocol
getting the host
getting the port
getting the file name
getting the reference
• An example of parsing a URL
Running the Example
Running the Example
Java URLInfo http://www.cs.huji.ac.il
Java URLInfo http://www.cs.huji.ac.il:80/~dbi/main.html#notes
Protocol: http
Host: www.cs.huji.ac.il
File name:
Port: -1
Reference: null
Protocol: http
Host: www.cs.huji.ac.il
File name: /~dbi/main.html
Port: 80
Reference: notes
Reading From A URL
url
openStream
InputStreamReader
BufferedReader
readLine
Page Content
Reading From a URL
• Example of reading from a given URL:
UrlReader.java
• For reading a URL using a proxy, we do the
following:
Java
–Dhttp.proxyHost=wwwproxy.cs.huji.ac.il
–Dhttp.proxyPort=8080 UrlReader url
Reading …
Java UrlReader url
The content of the file
Connecting to A URL
url
openConnection
URLConnection
getOutputStream
getInputStream
println
PrintWriter
Page
InputStreamReader
BufferedReader
readLine
Interacting with a CGI script
Create a URL
Open a connection to the URL
Set output capability on the URLConnection
Get an output stream from the connection
1.
2.
3.
4.
•
This output stream is connected to the standard input
stream of the cgi-bin script on the server
5. Write to the output stream
6. Close the output stream
HTTP connections
• You can create a connection to an HTTP
server with an object
HttpURLConnection
• This object extends the URLConnection
object
– getResponseCode
– getResponseMessage
– setRequestMethod
• Look in the Java API
HTTP/1.1 200 OK
<HTML>
…
</HTML>
URLEncoder
• contains a utility method encode for converting a
string into an encoded format
• To convert a string, each character is examined in
turn:
– The ASCII characters 'a' – 'z', 'A' – 'Z', '0' – '9', ".", "-",
"*", "_" remain the same
– Space is converted into a plus sign '+'
– All other characters are converted into the 3-character
string "%xy", where xy is the two-digit hexadecimal
representation of the lower 8-bits of the character
URL Connection Example
• The next example connects to a CGI script
on www.walla.co.il – a search tool is given a
word to search
SearchWalla
Sockets
• Communication is between sockets
• A socket is one end-point of a two-way
communication link between two programs
running on the network
• A socket has a binding to a port to which it
listens
• A socket implementation gives us the ability
to read from it and write to it as if it is a file
In Sockets
• A socket ‘knows’ the followings
–
–
–
–
The port number of the remote host
The host name (InetAddress) of the remote host
The local port to which it is bound
The local address of its local host
Sockets
• The server has a socket that listen to a
known port, e.g., Web server and port 80
• The server waits (listening to the socket) till
a client requests a connection
• A client requests a connection on the known
host and port of the server
• Q: What should the server do so that it can
serve other clients as well?
Client Requests for a Connection
Port: 8090
Local Port: 80
Local host:
www.google.com
Remote host:
132.65.32.29
Port: 8888
Local Port: 80
Local host:
www.google.com
Remote host:
132.68.7.11
Server application
64.208.34.100
www.google.com
Port 8090
Port 80
Client application
132.65.32.29
Port 8888
Client application
132.68.7.11
Socket
• Class Socket – implements the client side of
the connection
• Class ServerSocket – implements the server
side of the connection
Using a Socket
host
Socket
port
getInputStream
InputStreamReader
BufferedReader
readLine
Page Content
Using a Socket
// Constructors (partial list)
public Socket()
public Socket(InetAddress address, int port);
public Socket(String host, int port);
// Methods (partial list)
public void close();
public InetAddress getInetAddress();
public int getLocalPort();
public InputStream getInputStream();
public OutputStream getOutputStream();
public int getPort();
public String toString();
Using a Socket (client)
• A client:
1.Opens a socket (with a binding to which port?)
2.Opens an input stream and output stream to the
socket
3.Reads from and write to the stream according to
the client’s protocol
4.Closes the streams
5.Closes the socket
Using a Socket (cont.)
•
A server:
1. Open a socket
2. Open an input stream and output stream to the
socket
3. Read from and write to the stream according
to the server's protocol
4. Close the streams
5. Close the socket
A Client Example
• The following is a client that connects to a
Time Server (port 13) and returns the curret
time
TimeClient
Running the TimeClient
java TimeClient
Tue Mar 13 12:42:09 2001
ServerSocket
// Constructors (partial list)
The size or requests
queue with default
of 50 requests
public ServerSocket(int port);
public ServerSocket(int port, int count);
// Methods (partial list)
public Socket accept();
public void close();
What happens when a
running program reaches
accept()?
public InetAddress getInetAddress();
public int getLocalPort();
public String toString();
Why don’t we have getPort
in addition to getLocalPort?
A Server Example
• The following is a time server that returns
the time:
TimeServer
• Note: When the ServerSocket constructor is
given port number 0, a random free port is
chosen
More on Server Socket
• A ServerSocket 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 ServerSocket is
performed by an instance of the SocketImpl
class
• The abstract class SocketImpl is a common
superclass of all classes that actually implement
sockets
• It is used to create both client and server sockets
Server side
import java.net.*;
import java.io.*;
// A server that says 'hello'
class HelloServer {
public static void main(String[] args) {
int port = Integer.parseInt(args[0]);
ServerSocket server = null;
try {
server = new ServerSocket(port);
} catch (IOException ioe) {
System.err.println("Couldn't run"+
"server on port "+port);
return;
}
Server side
while(true) {
try {
Socket connection = server.accept();
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
PrintWriter writer =
new PrintWriter(
new OutputStreamWriter(
connection.getOutputStream()));
String clientName = reader.readLine();
writer.println("Hello "+clientName);
writer.flush();
} catch (IOException ioe1) {}
}
Client side
import java.net.*;
import java.io.*;
// A client of an HelloServer
class HelloClient {
public static void main(String[] args) {
String hostname = args[0];
int port = Integer.parseInt(args[1]);
Socket connection = null;
try {
connection = new Socket(hostname, port);
} catch (IOException ioe) {
System.err.println("Connection failed");
return;
}
Client side
try {
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
PrintWriter writer =
new PrintWriter(
new OutputStreamWriter(
connection.getOutputStream()));
writer.println(args[2]); // client name
String reply = reader.readLine();
System.out.println("Server reply: "+reply);
writer.flush();
} catch (IOException ioe1) {
}
}
Datagrams
• Datagram packets are used to implement a
connectionless, packet based, delivery service
• Each message is routed from one machine to
another based solely on information contained
within that packet
• Multiple packets sent from one machine to another
might be routed differently, and might arrive in
any order
• Packets may be lost or duplicated during transit
• The class DatagramPacket represents a datagram
in Java
DatagramPacket Class
//Constructors
public DatagramPacket(byte ibuf[], int ilength);
public DatagramPacket(
byte ibuf[], int ilength, InetAddress iaddr, int
iport);
// Methods
public synchronized InetAddress getAddress();
public synchronized int getPort();
public synchornized byte[] getData();
int getLength();
void
void
void
void
setAddress(InetAddress iaddr);
setPort(int iport);
setData(byte ibuf[]);
setLength(int ilength);
DatagramSocket
• This class represents a socket for sending and receiving
datagram packets
• Addressing information for outgoing packets is contained
in the packet header
• A socket that is used to read incoming packets must be
bound to an address (sockets that are used for sending must be
bound as well, but in most cases it is done automatically)
• There is no special datagram server socket class
• Since packets can be lost, the ability to set timeouts is
important
Class DatagramSocket
// Constructors
DatagramSocket()
DatagramSocket(int port)
DatagramSocket(int port, InetAddress iaddr)
// Methods
void close()
InetAddress getLocalAddress()
int getLocalPort()
int getSoTimeout()
void receive(DatagramPacket p)
void send(DatagramPacket p)
setSoTimeout(int timeout)
Echo Servers
• A common network service is an echo
server
• An echo server simply sends packets back
to the sender
• A client creates a packet, sends it to the
server, and waits for a response
• Echo services can be used to test network
connectivity and performance
Echo Client Example
import java.net.*; import java.io.*; import java.util.*;
public class EchoClient {
static int echoPort = 7; static int msgLen = 16; static int timeOut=1000;
public static void main(String argv[]) {
try {
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet;
byte msg[] = new byte[msgLen];
InetAddress echoHost = InetAddress.getByName(argv[0]);
packet = new DatagramPacket(msg,msgLen,echoHost,echoPort);
socket.send(packet);
socket.setSoTimeout(timeOut);
socket.receive(packet);
}
catch (InterruptedIOException e) {System.out.println("Timeout");}
catch (Exception e) {}}}
EchoServer
import java.net.*;import java.io.*;import java.util.*;
public class EchoServer {
static int echoPort = 7000; static int msgLen = 1024;
public static void main(String args[]) {
try {
DatagramSocket socket = new DatagramSocket(echoPort);
DatagramPacket p,reply;
byte msg[] = new byte[msgLen];
packet = new DatagramPacket(msg,msgLen);
for (;;) {
sock.receive(p);
System.out.println(p.getAddress());
reply =
new DatagramPacket(p.getData(),p.getLength(),p.getAddress(),p.getPort());
socket.send(reply);
}
} catch (Exception e) {} }}
Java Net Classes
Class
Description
DatagramPacket
This class represents a datagram packet.
DatagramSocket
This class represents a socket for sending and receiving
datagram packets.
InetAddress
This class represents an Internet Protocol (IP) address.
MulticastSocket
The multicast datagram socket class is useful for sending
and receiving IP multicast packets.
ServerSocket
This class implements server sockets.
Socket
This class implements client sockets (also called just
"sockets").
URL
A pointer to a "resource" on the World Wide Web.
URLConnection
The superclass of all classes that represent a
communications link between an application and a URL.