Top Banner
Telecooperation Technische Universität Darmstadt Copyrighted material; for TUD student use only : Introduction to Java Network Programming and HTTP FG Telekooperation Prof. Max Mühlhäuser Dirk Bradler, Julian Schröder-Bernhardi
24

Introduction to Java Network Programming and HTTP

Jan 05, 2016

Download

Documents

diallo

Introduction to Java Network Programming and HTTP. FG Telekooperation Prof. Max Mühlhäuser Dirk Bradler, Julian Schröder-Bernhardi. Outline. Hypertext Transfer Protocol – HTTP Different versions Requests and responses Java network programming Opening sockets in Java - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introduction to Java Network Programming and HTTP

Telecooperation

Technische Universität Darmstadt

Copyrighted material; for TUD student use only

:

Introduction to Java Network Programming and HTTP

FG TelekooperationProf. Max MühlhäuserDirk Bradler, Julian Schröder-Bernhardi

Page 2: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Outline

• Hypertext Transfer Protocol – HTTP– Different versions– Requests and responses

• Java network programming– Opening sockets in Java– Reading and writing with sockets

Page 3: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

HyperText Transfer Protocol – HTTP

• Origins in early 1990’s• Three versions of HTTP

– HTTP/0.9 (name not official)• The original protocol, never standardized• Very simple, only one type of requests

– HTTP/1.0• First “real” HTTP protocol version, RFC 1945• Widely used by the first browsers• Still quite a simple protocol

– HTTP/1.1• Current standardized version, RFC 2616• Extends HTTP 1.0 in many ways, backwards compatible

Page 4: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

HTTP Connections

• Non-persistent connections (HTTP/1.0)– Use a new TCP connection for each object– Example: HTML page with 10 images 11 TCP conns!– Performance not good (TCP 3-way handshake, 2 extra RTTs)– TCP slow start for each connection

• Persistent connections (HTTP/1.1)– Keep connection open for several requests no slow start– Issue new request when old download finishes (extra RTT!)– No slow start, except at very beginning– Further improvement: Pipelining

• Send several requests without waiting for reply• Continuous download!• Most efficient, but not always widely supported/implemented

Page 5: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

HTTP Requests• Example request:

GET /index.html HTTP/1.1

Host: www.google.com

Connection: close

User-Agent: Mozilla 1.6

<CR><LF>

• Request line, header lines, possible body

(HTTP/1.2) PEP?- Discontinued- Protocol Extension Protocol

Page 6: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

<cr> <lf>

Header field

:<sp> <cr> <lf>Value

<sp>

HTTP Request Format

Method <sp>

URL Version

<cr> <lf>

...

Entity body

Header lines

Request line

Header field

:<sp> <cr> <lf>Value

Page 7: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

HTTP Requests

• Method: GET, POST, HEAD, ... (see RFC 2616)• Normal requests GET

– Retrieving web pages, images, etc.– Simple forms also processed with GET

• Entity body in POST– POST used for complicated forms (lot of info to handle)– Contents of form in entity body

• Parameters from forms separated by &– Example: field1=value1&field2=value2&...

Page 8: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

HTTP Responses

• Example response:

HTTP/1.1 200 OKDate: Thu, 06 Aug 1998 12:00:15 GMTConnection: closeServer: Apache/1.3.0 (Unix)Last-Modified: Mon, 22 Jun 1998 09:23:24 GMTContent-Length: 6821Content-Type: text/html<CR><LF>(data data data data data)

• Status line, header lines, requested document

Page 9: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

<cr> <lf>

Header field

:<sp> <cr> <lf>Value

<sp>

The BufferedReader Problem

Version <sp>

Status

Phrase <cr> <lf>

...

Entity body

Header lines

Status line

Header field

:<sp> <cr> <lf>Value

Page 10: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

HTTP Responses

• Status code gives result• Phrase for humans, only code is important!• Typical status codes with standard phrases:

– 200 OK: Everything went fine, information follows– 301 Moved Permanently: Document moved, new location

in Location-header in response– 400 Bad Request: Error in request– 404 Not Found: Document does not exist on server– 505 HTTP Version Not Supported: Requested protocol

version not supported by server

Page 11: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

More about HTTP

• Above describes basic HTTP/1.0• Read RFC for information about different header

fields and their meaning

• HTTP/1.1 adds lot of new headers and features

Page 12: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Java Network Programming

• Network programming in Java in general much easier than in other languages...

• ...except some advanced things which are harder – E.g. setting socket options

• Java supports both TCP and UDP sockets• Many different ways to read/write sockets

– Differentiates between text and binary – Often several correct ways to handle socket– TIMTOWTDI: There Is More Than One Way To Do It

Page 13: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Network Programming Guidelines

• Robustness Principle– Be conservative in what you do; be liberal in what you

accept from others.

• Key ingredient for interoperability

• Reformulation– Follow the standards for things you send– You may receive things that does not fully follow the

standard

• But: If you receive crap, you should return a well-defined error, don‘t try to understand it

Page 14: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Using TCP Sockets

• Client side:– Socket sock = new Socket(host, port);

• String host = host to contact– Host can also be InetAddress instead of String

• int port = port to be used (e.g. 80 for HTTP)• Server side

– ServerSocket sock = new ServerSocket(port);

• Listen for incoming connections– Socket client = sock.accept();

Page 15: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Using UDP Sockets

• Same for client and server– DatagramSocket sock = new DatagramSocket();

• For server, give port number as argument

• Send packets with send()• Receive packets with receive()

• UDP packets implemented in DatagramPacket-class

Page 16: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Reading and Writing TCP Sockets

• Socket has InputStream and OutputStream• Need to wrap other streams around them• Some wrappers implement buffers

• Java has many different I/O Streams– See Java API for others (e.g., reading files)

• Relevant for sockets:– InputStreamReader, OutputStreamWriter– BufferedReader, BufferedWriter– DataInputStream, DataOutputStream

Page 17: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Reading from a Socket

• Possible code:InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);

• Read text by calling br.readLine()

• Can be used only for reading text!– Possible solution: Implement a Reader on your own

without buffering to mix and match text and binary data!

Page 18: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Writing to a Socket

• Typical codeOutputStream os = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os);BufferedWriter bw = new BufferedWriter(osw);

• Write by calling one of many write()-functions– See the different classes for different possibilities– Can also write directly to OutputStream– For Streams, Strings need to be converted to bytes with

getBytes()

• Writer are only for text output!

Page 19: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

DataInputStream

• DataInputStream can read binary data from socket

• Also can send primitive data types• Typical code

InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);

• Read binary data with read() (see API for details)• Bonus functionality: Read text with readLine()

– But: deprecated (does not work correctly in some cases), use in Praktikum results in a worse grade

Page 20: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

DataOutputStream

• DataOutputStream can be used to write• Typical code:

– OutputStream os = socket.getOutputStream();– DataOutputStream dos = new DataOutputStream(os);

• DataOutputStream can also write text and binary– Has writeBytes()-function no need for String.getBytes()

Page 21: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Differences Between Output Streams?!?

• What is the difference between DataOutputStream and normal OutputStream wrapped with BufferedWriter?

• Answer: There is almost no difference in practice

• Some subtleties:– Possible problems with conversion between 8-bit and 16-

bit characters (e.g., DataInputStream.readLine())– Possible text/binary data issues– Possible problems with buffering (use flush())– dos.writeBytes(str) vs. bw.write(str.getBytes())

• No “correct” way, use either as long as it works– Be careful not to get confused!

Page 22: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Assignment 1

• Java Network Programming

Page 23: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Assignment Details

• Assignment sheet on the Web page of the Praktikum• Milestones:

1. TCP client and server2. Simple Web server3. Web server improvements

• Important: pay attention to error-semantics, be conservative (i.e. follow the RFC) in what you send

• Deadline for returning: 05.11.2008 at 12:00• To be returned: Code with comments, test cases

used– Send at [email protected]– CC at [email protected]

Page 24: Introduction to Java Network Programming and HTTP

Prof. Dr. M. MühlhäuserTelekooperation

©

:

Questions?