52
Networking with Java 1

Networking with Java 1. Introduction to Networking 2

Embed Size (px)

Citation preview

Page 1: Networking with Java 1. Introduction to Networking 2

Networking with Java

1

Page 2: Networking with Java 1. Introduction to Networking 2

Introduction to Networking

2

Page 3: Networking with Java 1. Introduction to Networking 2

Protocols

3

Hi TCP connection request

HiTCP connectionreplyGot the

time? GET http://www.google.com

2:00<file>

time

Client

Server

Page 4: Networking with Java 1. Introduction to Networking 2

Internet Architecture Model

4

Transport (TCP,UDP) DATA

Link (LINK) HEADER HEADER DATA

Network (IP) HEADER DATA

Application (HTTP, FTP) DATA

HEADER

HEADER

HEADER

Page 5: Networking with Java 1. Introduction to Networking 2

TCP (Transmission-Control Protocol)

• Enables symmetric byte-stream transmission between two endpoints (applications)

• Reliable communication channel• TCP perform these tasks:

– connection establishment by handshake (relatively slow)– division to numbered packets (transferred by IP)– error correction of packets (checksum)– acknowledgement and retransmission of packets– connection termination by handshake

5

Page 6: Networking with Java 1. Introduction to Networking 2

UDP (User Datagram Protocol)

• Enables direct datagram (packet) transmission from one endpoint to another

• No reliability (except for data correction)– sender does not wait for acknowledgements – arrival order is not guaranteed– arrival is not guaranteed

• Used when speed is essential, even in cost of reliability– e.g., streaming media, games, Internet telephony, etc.

6

Page 7: Networking with Java 1. Introduction to Networking 2

Ports

• A computer may have several applications that communicate with applications on remote computers through the same physical connection to the network

• When receiving a packet, how can the computer tell which application is the destination?

• Solution: each channel endpoint is assigned a unique port that is known to both the computer and the other endpoint

7

Page 8: Networking with Java 1. Introduction to Networking 2

Ports (cont)

• Thus, an endpoint application on the Internet is identified by– A host name → 32 bits IP-address – A 16 bits port

• Why don’t we specify the port in a Web browser?

8

Page 9: Networking with Java 1. Introduction to Networking 2

Known Ports

• Some known ports are– 20, 21: FTP– 23: TELNET– 25: SMTP– 110: POP3– 80: HTTP– 119: NNTP

9

21 23 25 110 80 119

Client Application

web browsermail client

Page 10: Networking with Java 1. Introduction to Networking 2

Sockets• A socket is a construct that represents one end-point of

a two-way communication channel between two programs running on the network

• Using sockets, the OS provides processes a file-like access to the channel– i.e., sockets are allocated a file descriptor, and processes can

access (read/write) the socket by specifying that descriptor

• A specific socket is identified by the machine's IP and a port within that machine

10

Page 11: Networking with Java 1. Introduction to Networking 2

Sockets (cont)

• A socket stores the IP and port number of the other end-point computer of the channel

• When writing to a socket, the written bytes are sent to the other computer and port (e.g., over TCP/IP)– That is, remote IP and port are attached to the packets

• When OS receives packets on the network, it uses their destination port to decide which socket should get the received bytes

11

Page 12: Networking with Java 1. Introduction to Networking 2

Java Sockets

Low-Level Networking

12

Page 13: Networking with Java 1. Introduction to Networking 2

Java Sockets

• Java wraps OS sockets (over TCP) by the objects of class java.net.Socket

• new Socket(String remoteHost, int remotePort) creates a TCP socket and connects it to the remote host on the remote port (hand shake)

• Write and read using streams:– InputStream getInputStream()– OutputStream getOutputStream()

13

Page 14: Networking with Java 1. Introduction to Networking 2

A Socket Example

14

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

public class SimpleSocket {

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

 }}

Page 15: Networking with Java 1. Introduction to Networking 2

15

 Socket socket = new Socket("www.google.com", 80);    InputStream istream = socket.getInputStream();    OutputStream ostream = socket.getOutputStream();

    String request =       "GET index.html HTTP/1.1\r\n"  +       "Host: www.cs.biu.ac.il\r\n" +       "Connection: close\r\n\r\n";            ostream.write(request.getBytes());

    byte[] response = new byte[4096]; int bytesRead = -1; 

    while ((bytesRead = istream.read(response)) >= 0) {      System.out.write(response, 0, bytesRead);    }    socket.close();

Needed for forwarding for

example

Page 16: Networking with Java 1. Introduction to Networking 2

Timeout

• You can set timeout values to blocking method read() of Socket

• Use the method socket.setSoTimeout(milliseconds)

• If timeout is reached before the method returns, java.net.SocketTimeoutException is thrown

16

Page 17: Networking with Java 1. Introduction to Networking 2

Java Sockets and HTTP

17

Page 18: Networking with Java 1. Introduction to Networking 2

HTTP Message Structure

• A HTTP message has the following structure:

18

Request/Status-Line \r\nHeader1: value1 \r\nHeader2: value2 \r\n...HeaderN: valueN \r\n\r\n

Message-BodyMessage-Body

Page 19: Networking with Java 1. Introduction to Networking 2

Reading HTTP Messages• Several ways to interpret the bytes of the body

– Binary: images, compressed files, class files, ...– Text: ASCII, Latin-1, UTF-8, ...

• Commonly, applications parse the headers of the message, and process the body according to the information supplied by the headers– E.g., Content-Type, Content-Encoding, Transfer-

Encoding

19

Page 20: Networking with Java 1. Introduction to Networking 2

An Example

20

Page 21: Networking with Java 1. Introduction to Networking 2

Parsing the Headers

• So how are the headers themselves are represented?

• The headers of a HTTP message must be in US-ASCII format (1 byte per character)

21

Page 22: Networking with Java 1. Introduction to Networking 2

Example: Extracting the Headers

22

Socket socket = new Socket(argv[0], 80); InputStream istream = socket.getInputStream();OutputStream ostream = socket.getOutputStream();

 String request = "GET / HTTP/1.1\r\n" +                 "Host: " + argv[0] + "\r\n" +              "Connection: close\r\n\r\n"; ostream.write(request.getBytes());

StringBuffer headers = new StringBuffer(); int byteRead = 0;while ( !endOfHeaders(headers) && 

(byteRead = istream.read()) >= 0) {      headers.append((char) byteRead);}System.out.print(headers);socket.close();

Page 23: Networking with Java 1. Introduction to Networking 2

Example: Extracting the Headers (cont)

23

public static boolean endOfHeaders(StringBuffer headers) {     int lastIndex = headers.length() - 1;

    if (lastIndex < 3 || headers.charAt(lastIndex) != '\n')      return false;

    return ( headers.substring(lastIndex - 3, lastIndex + 1)         .equals("\r\n\r\n"));  }

Page 24: Networking with Java 1. Introduction to Networking 2

Persistent Connections• According to HTTP/1.1, a server does not have to close

the connection after fulfilling your request• One connection (socket) can be used for several

requests and responses send more requests – even while earlier responses are being transferred (pipelining)– saves “slow start” time

• how can the client know when one response ends and a new one begins?

• To avoid persistency, require explicitly by the header:Connection: close

24

Page 25: Networking with Java 1. Introduction to Networking 2

URL and URLConnection

High-Level Networking

25

Page 26: Networking with Java 1. Introduction to Networking 2

Working with URLs

• URL (Uniform/Universal Resource Locator): a reference (an address) to a resource on the

Internet

http://www.cs.huji.ac.il:80/~dbi/main.html#notes

26

ProtocolHost

NamePort

Number

File Nam

e

Reference

Page 27: Networking with Java 1. Introduction to Networking 2

The Class URL• The class URL is used for parsing URLs• Constructing URLs:

– URL w3c1 = new URL("http://www.w3.org/TR/"); – URL w3c2 = new URL("http","www.w3.org",80,"TR/"); – URL w3c3 = new URL(w3c2, "xhtml1/");

• If the string is not an absolute URL, then it is considered relative to the URL

27

Page 28: Networking with Java 1. Introduction to Networking 2

Parsing URLs

• The following methods of URL can be used for parsing URLsgetProtocol(), getHost(), getPort(), getPath(), getFile(), getQuery(), getRef()

28

Page 29: Networking with Java 1. Introduction to Networking 2

The class URLConnection

• To establish the actual resource, we can use the object URLConnection obtained by url.openConnection()

• If the protocol of the URL is HTTP, the returned object is of class HttpURLConnection

• This class encapsulates all socket management and HTTP directions required to obtain the resource

29

Page 30: Networking with Java 1. Introduction to Networking 2

30

public class ContentExtractor {

  public static void main(String[] argv) throws Exception {    URL url = new URL(argv[0]);        System.out.println("Host: " + url.getHost());    System.out.println("Protocol: " + url.getProtocol());    System.out.println("----");            URLConnection con = url.openConnection();    InputStream stream = con.getInputStream();            byte[] data = new byte[4096]; int bytesRead = 0;     while((bytesRead=stream.read(data))>=0) {       System.out.write(data,0,bytesRead);}}}

Page 31: Networking with Java 1. Introduction to Networking 2

About URLConnection

• The life cycle of a URLConnection object has two parts:– Before actual connection establishment

• Connection configuration– After actual connection establishment

• Content retrieval

• Passage from the first phase to the second is implicit– A result of calling some committing methods, like

getDate()

31

Page 32: Networking with Java 1. Introduction to Networking 2

About HttpURLConnection• The HttpURLConnection class encapsulates all HTTP

transaction over sockets, e.g.,– Content decoding– Redirection– Proxy indirection

• You can control requests by its methods– setRequestMethod, setFollowRedirects,

setRequestProperty, ...

32Read more about HttpURLConnection Class

Page 33: Networking with Java 1. Introduction to Networking 2

URLEncoder• Contains a utility method encode for converting a string

into an encoded format (used in URLs)• To convert a string, each character is examined in turn:

– Space is converted into a plus sign +– a-z, A-Z, 0-9, ., -, * and _ remain the same. – The bytes of all special characters are replaced by

hexadecimal numbers, preceded with %

• To decode an encoded string, use decode() of the class URLDecoder

33

Page 34: Networking with Java 1. Introduction to Networking 2

Client-Server Model

• A common paradigm for distributed applications• Asymmetry in connection establishment:

– Server waits for client requests (daemon) at a well known address (IP+port)

– Connection is established upon client request

• Once the connection is made, it can be either symmetric (TELNET) or asymmetric (HTTP)

• For example: Web servers and browsers

34

Page 35: Networking with Java 1. Introduction to Networking 2

Client-Server Interaction

35

Client

Server

80

Client

Page 36: Networking with Java 1. Introduction to Networking 2

Client-Server Interaction

36

Client

Server

80

Client

6945

Page 37: Networking with Java 1. Introduction to Networking 2

Client-Server Interaction

37

Client

Server

80

Client

1932

6945

Page 38: Networking with Java 1. Introduction to Networking 2

Client-Server Interaction

38

Client

Server

80

Client

1932

6945

8002

Page 39: Networking with Java 1. Introduction to Networking 2

Client-Server Interaction

39

Client

Server

80

Client

1932

6945

8002

2341

Page 40: Networking with Java 1. Introduction to Networking 2

Java Sever Sockets

40

Page 41: Networking with Java 1. Introduction to Networking 2

Java Sockets – A Reminder

• Java wraps OS sockets (over TCP) by the objects of class java.net.Socket

• new Socket(String remoteHost, int remotePort) creates a TCP socket and connects it to the remote host on the remote port (hand shake)

• Write and read using streams:– InputStream getInputStream()– OutputStream getOutputStream()

41

Page 42: Networking with Java 1. Introduction to Networking 2

Java ServerSocket• ServerSocket represents a socket that listens and waits

for requests from clients• Construction:

– new ServerSocket(int port)– Why do we want to specify the port?

• Listen and accept incoming connections– Socket accept()– returns a new socket (with a new port) for the new channel– blocks until connection is made

42

Page 43: Networking with Java 1. Introduction to Networking 2

43

public class EchoServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8000); Socket socket = null;

while (true) { try { ... next slide ... } catch (IOException exp) { ... }

finally { try {if (!socket.isClosed()) socket.close(); } catch (IOException e) {} }}}}

Page 44: Networking with Java 1. Introduction to Networking 2

44

socket = serverSocket.accept();

String clientName = socket.getInetAddress().getHostName();

BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); PrintStream writer = new PrintStream(socket.getOutputStream());

writer.println("Hello " + clientName + "!"); writer.flush();

String lineRead = null;

while ((lineRead = reader.readLine()) != null) { writer.println("You wrote: " + lineRead); writer.flush(); }

bytes

chars

Page 45: Networking with Java 1. Introduction to Networking 2

Accepting Connections

• Usually, the accept() method is executed within an infinite loop– i.e., while(true){...}

• Whenever accept() returns, a new thread is launched to handle that interaction (not in our example)

• Hence, the server can handle several requests concurrently

45

Page 46: Networking with Java 1. Introduction to Networking 2

Timeout

• You can set timeout values to the blocking method– accept() of ServerSocket

• Use the method serverSocket.setSoTimeout(milliseconds)

• If timeout is reached before the method returns, java.net.SocketTimeoutException is thrown

46

Page 47: Networking with Java 1. Introduction to Networking 2

Get Vs. Post

• Get– Returns the content of the requested URL– Usually a static resource

• Post– A block of data is sent with the request– Usually a program or a form

47

Page 48: Networking with Java 1. Introduction to Networking 2

ContentExtractor – A Reminder

48

public class ContentExtractor {

  public static void main(String[] argv) throws Exception {    URL url = new URL(argv[0]);         

     System.out.println("Host: " + url.getHost());    System.out.println("Protocol: " + url.getProtocol());    System.out.println("----");

    HttpURLConnection con = url.openConnection();    InputStream stream = con.getInputStream();            byte[] data = new byte[4096]; int bytesRead = 0;     while((bytesRead=stream.read(data))>=0) {       System.out.write(data,0,bytesRead);}}}

Page 49: Networking with Java 1. Introduction to Networking 2

Sending POST Requests

• In order to send POST requests with HttpURLConnection, you have to do the following:– Enable connection output: con.setDoOutput(true);

– Get the output stream: con.getOutputStream()

• This changes the method from GET to POST

– Write the message body into the output stream– close the output stream (important!)

49

Page 50: Networking with Java 1. Introduction to Networking 2

POST Example - SearchWalla

50

URL url = new URL("http://find.walla.co.il/");URLConnection connection = url.openConnection();connection.setDoOutput(true);

String query = "q=" + URLEncoder.encode(argv[0], "UTF-8");    OutputStream out = connection.getOutputStream();  out.write(query.getBytes());out.close();

InputStream in = connection.getInputStream();int bytesRead = -1;  byte[] response = new byte[4096];while ((bytesRead = in.read(response)) >= 0)      System.out.write(response, 0, bytesRead);in.close();

Page 51: Networking with Java 1. Introduction to Networking 2

Sent Headers

51

POST / HTTP/1.1User-Agent: Java/1.5.0_01Host: find.walla.co.ilAccept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2Connection: keep-aliveContent-type: application/x-www-form-urlencodedContent-Length: 18

q=Java+networking

java SearchWalla "Java networking"

Page 52: Networking with Java 1. Introduction to Networking 2

Not Covered: UDP Connections

• The URL, URLConnection, Socket and ServerSocket classes all use the TCP protocol to communicate over the network

• Java programs can also use UDP protocol for communication

• For that, use DatagramPacket, DatagramSocket, and MulticastSocket classes

52