Internet Networking - PowerPoint PPT Presentation

1 / 80
About This Presentation
Title:

Internet Networking

Description:

A worldwide collection of networks, routing equipment, and computers ... Internet Protocol (IP) does not notify the sender if data is lost or garbled ... – PowerPoint PPT presentation

Number of Views:57
Avg rating:3.0/5.0
Slides: 81
Provided by: facul56
Category:

less

Transcript and Presenter's Notes

Title: Internet Networking


1
Chapter 22
  • Internet Networking

2
CHAPTER GOALS
  • To understand the concept of sockets
  • To learn how to send and receive data through
    sockets
  • To implement network clients and servers
  • To communicate with web servers and server-side
    applications through Hypertext Transfer Protocol
    (HTTP)

3
Internet
  • A worldwide collection of networks, routing
    equipment, and computers
  • Uses a common set of protocols to define how the
    parties will interact with each other
  • Many different services are offered over the
    Internet
  • The World Wide Web
  • Email

4
Physical Media
  • Network cabling
  • Electrical impulses represent the information
    flow
  • Telephone wires using a modem
  • Data travels encoded as tones
  • Air in a wireless network
  • Signals are sent by modulating radio frequencies

5
Data Transmission
  • Data transmission consists of sending and
    receiving streams of zeros and ones along the
    network connection

6
Two Types of Information
  • Application data
  • consists of the information one computer wants
    to send to another
  • Network protocol data
  • describes how to reach the intended computer
  • describes how to check for errors in the
    transmission

7
Network Protocol
previous start next
File Purse.java
  • Local area network protocols
  • Microsoft Networking
  • Novell NetWare
  • AppleTalk
  • Protocol for connecting local area networks
  • Internet Protocol (IP)


previous start next
8
Sending Data from A to B across the Internet
  • A is you home computer
  • It is connected by phone lines to an Internet
    Service
  • Provider (ISP)
  • The ISP is connected to an Internet Access Point
  • B is on an local area network at XYZ Computers.
  • XYZ has its own Internet Access Point
  • The Internet Access Points are connected by a
    complex collection of pathways (the Internet)
  • Over these pathways a message sent from one
    access
  • point can eventually reach any access point

9
Two Computers Communicating across the Internet
10
Destination Address
  • Data must be marked with a destination address
  • In IP, addresses are denoted by a sequence of
    four numbers
  • o Each is one byte (a number between 0 and
    255)
  • o For example 130.65.86.66
  • To send data to B, A needs to know B's Internet
    address
  • o A includes that address in the protocol
    portion when sending the data

11
Domain Naming Service
  • In addition to an IP address, computers can have
    an easy-to-remenber domain name
  • For example, java.sun.com
  • A service called a Domain Naming Service (DNS)
    translates from domain name to Internet address
  • When A wants to request data from a domain name
  • It asks the DNS for the numeric Internet Address
  • It includes the numeric address with the request
    for data

12
Packets
  • IP breaks large chunks of data up into more
    manageable packets
  • Each packet is delivered separately
  • Each packet in a larger transmission may be sent
    by a different route.
  • Packets are numbered
  • The recipient reassembles the data

13
Transmission Control Protocol
  • Internet Protocol (IP) does not notify the
    sender if data is lost or garbled
  • This is the job of a higher level protocol
    Transmission Control Protocol (TCP)
  • The most commonly used Internet services use TCP
    with IP (TCP/IP)

14
TCP's Job
  •  Attempt to deliver the data
  • Try again if there are failures
  • Notify the sender whether or not the attempt
    was successful

15
Port Numbers
previous start next
  • One computer can offer multiple services
    over the Internet
  • o For example, both a web server program
    and an email server program
  • When data are sent to that computer, they need
    to indicate which program is to receive the data
  • IP uses port numbers for this

previous start next
16
  • Port Numbers
  • A port number is an integer between 0 and
    65,535
  • The sending program must know the port number
    of the receiving program
  • This number is included in the transmitted
    data

17
Contents of TCP Packet
  • The Internet address of the recipient
  • The port number of the recipient
  • Internet address of the sender
  • The port number of the sender

18
The OSI Reference Model
19
Application Level Protocol
  • TCP/IP mechanism establishes an Internet
    connection between two ports on two computers.
  • Each Internet application has its own
    application protocol
  • This application protocol describes how data for
    that application are transmitted

20
Hypertext Transfer Protocol
  • The application protocol used by the World Wide
    Web is Hypertext Transfer Protocol (HTTP)
  • A web address is called a Uniform Resource
    Locator (URL)
  • You type a URL into the address window of your
    browser
  • o For example, http//java.sun.com/index
    .html

21
Browser Steps
  • You type http//java.sun.com/index.html into
    the browser's address
  • The browser examines the part of the URL
    between the double slash and the first single
    slash
  • o In this case java.sun.com
  • o This identifies the computer to which
    you want to connect
  • o Because it contains letters, this part
    of the URL is a domain name
  • The browser sends a quest to a DNS server to
    obtain the Internet address of the computer with
    the domain name java.sun.com

22
Browser Steps
  • From the http prefix to the URL, the browser
    decides that the protocol you want to use is HTTP
  • HTTP uses port 80 by default
  • The browser establishes a TCP/IP connection to
    port 80 at the Internet address determined above
  • The browser deduces from the /index.html that
    you want to see the file /index.html
  • It sends this request formatted as an HTTP
    command through the established connection
  • GET /index.html HTTP/1.0
  • a blank line

23
Browser Steps
  • The web server running on the computer whose
    Internet Address was obtained above receives the
    request
  • It decodes the request
  • It fetches the file /index.html
  • It sends the file back to the browser

24
Browser Steps
  • The browser displays the contents of the file
    for you to see
  • Since this file is an HTML file, the browser
    decodes the HTML codes into fonts, paragraphs
    etc.
  • If the file contains images, the browser makes
    more GET requests through the same connection

25
Telnet
  • Telnet program allows you to
  • o Type characters to send to a remote
    computer and
  • o View the characters that the remote
    computer sends back
  • It is a useful tool to establish test
    connections with servers
  • You can imitate the browser connection by using
    a dialog box or typing at the command line telnet
    java.sun.com 80

26
Telnet
  • After Telnet starts, type the following without
    using backspace
  • GET /index.html HTTP/1.0
  • then hit enter twice
  • The server responds to the request with the file
  • Telnet is not a browser
  • It does not understand HTML tags so it just
    displays everything it was sent

27
  • Web Server Response in Telnet

28
HTTP Commands
29
  • Client Program - Sockets
  • A socket is an object that encapsulates a TCP/IP
    connection
  • There is a socket on both ends of a connection
  • Syntax to create a socket in a Java program
  • Socket s new Socket(hostname, portnumber)
  • Code to connect to the HTTP port of server,
    java.sun.com
  • final int HTTP_PORT 80
  • Socket s new Socket("java.sun.com",
    HTTP_PORT)
  • If it can't find the host, the Socket constructor
    throws an UnknownHostException

30
  • Client Program - Input and Output Streams
  • Use the input and output streams attached to
    the socket s to communicate with the other
    endpoint of the connection
  • Code to obtain the input and output streams
    InputStream in s.getInputStream()
  • OutputStream out s.getOutputStream()
  • When you send data to the output stream out,
    the socket forwards them to the server
  • The socket catches the server's response and
    you can read it through the input stream in
  • When you are done communicating with the
    server, close the socket
  • s.close()

31
  • Client and Server Sockets

32
  • Client Program - Readers and Writers
  • InputStream and OutputStream send and receive
    bytes
  • To send and receive text, get a reader and a
    writer BufferedReader reader new
    BufferedReader(new InputStreamReader(in))
  • PrintWriter writer new PrintWriter(out)
  • A PrintWriter buffers the characters and only
    sends when the buffer is full
  • When sending a command, you want the whole
    command to be sent now so flush the buffer
    manually writer.print(command)
  • writer.flush()

33
  • Client Program - WebGet
  • This program lets you retrieve any item from
    a web server
  • You specify the host and item from the command
    line
  • For example
  • java WebGet java.sun.com index.html

34
File WebGet.java
  • 01 import java.io.BufferedReader
  • 02 import java.io.InputStream
  • 03 import java.io.InputStreamReader
  • 04 import java.io.IOException
  • 05 import java.io.OutputStream
  • 06 import java.io.PrintWriter
  • 07 import java.net.Socket
  • 08
  • 09 /
  • 10 This program demonstrates how to use a
    socket to communicate
  • 11 with a web server. Supply the name of the
    host and the
  • 12 resource on the command-line, for example
  • 13 java WebGet java.sun.com index.html
  • 14 /
  • 15 public class WebGet
  • 16
  • 17 public static void main(String args)
    throws IOException

35
  • 18
  • 19 // get command-line arguments
  • 20
  • 21 if (args.length ! 2)
  • 22
  • 23 System.out.println("usage java
    WebGet host resource")
  • 24 System.exit(0)
  • 25
  • 26 String host args0
  • 27 String resource args1
  • 28
  • 29 // open socket
  • 30
  • 31 final int HTTP_PORT 80
  • 32 Socket s new Socket(host, HTTP_PORT)
  • 33
  • 34 // get streams
  • 35
  • 36 InputStream in s.getInputStream()

36
  • 38
  • 39 // turn streams into readers and
    writers
  • 40
  • 41 BufferedReader reader new
    BufferedReader(
  • 42 new InputStreamReader(in))
  • 43 PrintWriter writer new
    PrintWriter(out)
  • 44
  • 45 // send command
  • 46
  • 47 String command "GET /" resource "
    HTTP/1.0\n\n"
  • 48 writer.print(command)
  • 49 writer.flush()
  • 50
  • 51 // read server response
  • 52
  • 53 boolean done false
  • 54 while (!done)
  • 55
  • 56 String input reader.readLine()

37
  • 58 else System.out.println(input)
  • 59
  • 60
  • 61 // always close the socket at the end
  • 62
  • 63 s.close()
  • 64
  • 65

38
  • A Server Program
  • This is a server program that enable clients to
    manage a set of bank accounts in a bank
  • When you develop a server application, you need
    some application-level protocol
  • The client can use this protocol to interact
    with the server
  • A simple bank access protocol is described on
    the next slide

39

Simple Bank Access Protocol
40
A Server Program
  • The server waits for the client to connect on a
    certain port. We choose 8888
  • To listen for incoming connections, use a
    server socket
  • To construct a server socket, provide the port
    number
  • ServerSocket server new ServerSocket(8888)
  • Use the accept method to wait for client
    connection and obtain a socket
  • Socket s server.accept()

41
Server Program - Readers and Writers
  • Get the input and output streams connected to the
    socket s
  • Create a reader and writer
  • BufferedReader in new BufferedReader( new
    InputStreamReader(s.getInputStream()))
  • PrintWriter out new PrintWriter(
    s.getOutputStream())
  • The server reads a command from the client
    String line in.readLine()

42
Server Program
  • The socket s is closed if
  • o The string received by the client
    equals QUIT command
  • o Or it is null
  • o A null string means the client has
    disconnected

43
Server Program
  • Use a StringTokenizer to analyze the client
    command string
  • The first token is the command
  • The second token is the account number

44
Server Program
  • If the command is DEPOSIT, deposit to the
    given account
  • If the command is WITHDRAW, withdraw from the
    given account
  • Then send the account number and new balance
    to the client
  • out.println(n " " bank.getBalance(account))


45
Server Program
  • The server program never stops
  • When you are done running the sever, kill it.

46
To Try Out Server Program
  • Run the server
  • Use Telnet to connect to localhost , port number
    8888
  • Start typing commands

47
Using the Telnet Program to Connect to the
BankServer
48
File BankServer.java
import java.io.IOException import
java.net.ServerSocket import java.net.Socket
/ A server that executes the Simple Bank
Access Protocol. / public class BankServer
public static void main(String args )
throws IOException final int
ACCOUNTS_LENGTH 10 Bank bank new
Bank(ACCOUNTS_LENGTH) final int SBAP_PORT
8888 ServerSocket server new
ServerSocket(SBAP_PORT)
System.out.println("Waiting for clients to
connect...")
import java.io.IOException import
java.net.ServerSocket import java.net.Socket
/ A server that executes the Simple Bank
Access Protocol. / public class BankServer
public static void main(String args )
throws IOException final int
ACCOUNTS_LENGTH 10 Bank bank new
Bank(ACCOUNTS_LENGTH) final int SBAP_PORT
8888 ServerSocket server new
ServerSocket(SBAP_PORT)
System.out.println("Waiting for clients to
connect...")

01 import java.io.IOException 02 import
java.net.ServerSocket 03 import
java.net.Socket 04 05 / 06 A server
that executes the Simple Bank Access
Protocol. 07 / 08 public class BankServer 09
10 public static void main(String args
) throws IOException 11 12 final
int ACCOUNTS_LENGTH 10 13 Bank bank
new Bank(ACCOUNTS_LENGTH) 14 final int
SBAP_PORT 8888 15 ServerSocket server
new ServerSocket(SBAP_PORT) 16
System.out.println("Waiting for clients to
connect...") 17
49
18 while (true) 19 20
Socket s server.accept() 21 22
BankService service new BankService(s,
bank) 23 service.doService() 24
s.close() 25 26 27
28 29 30 31 32 33 34 35
50
File BankService.java
  • 01 import java.io.BufferedReader
  • 02 import java.io.InputStream
  • 03 import java.io.InputStreamReader
  • 04 import java.io.IOException
  • 05 import java.io.OutputStream
  • 06 import java.io.PrintWriter
  • 07 import java.net.Socket
  • 08 import java.util.StringTokenizer
  • 09
  • 10 /
  • 11 Executes Simple Bank Access Protocol
    commands
  • 12 from a socket.
  • 13 /
  • 14 public class BankService
  • 15

51
16 / 17 Constructs a service object
that processes commands 18 from a socket
for a bank. 19 _at_param aSocket the
socket 20 _at_param aBank the bank 21
/ 22 public BankService(Socket aSocket, Bank
aBank) 23 24 s aSocket 25
bank aBank 26 27 28 / 29
Executes all commands until the QUIT command or
the 30 end of input. 31 / 32
public void doService() throws IOException 33
34 BufferedReader in new
BufferedReader( 35 new
InputStreamReader(s.getInputStream()))
52
36 PrintWriter out new PrintWriter( 37
s.getOutputStream()) 38 39
while (true) 40 41 String
line in.readLine() 42
System.out.println("Received " line) 43
if (line null line.equals("QUIT")) 44
return 45 46 String
response executeCommand(line) 47 48
System.out.println("Sending " response) 49
out.println(response) 50
out.flush() 51 52 53 54
/ 55 Executes a single command.
53
56 _at_param line the command 57
_at_return the reply to send to the client. 58
/ 59 public String executeCommand(String
line) 60 61 StringTokenizer
tokenizer 62 new StringTokenizer(line
) 63 String command tokenizer.nextToken(
) 64 int account Integer.parseInt(tokeni
zer.nextToken()) 65 if (command.equals("DE
POSIT")) 66 67 double amount
Double.parseDouble( 68
tokenizer.nextToken()) 69
bank.deposit(account, amount) 70 71
else if (command.equals("WITHDRAW")) 72
73 double amount Double.parseDouble(
74 tokenizer.nextToken()) 75
bank.withdraw(account, amount)
54
76 77 else if
(!command.equals("BALANCE")) 78 return
"Invalid command" 79 80 return account
" " bank.getBalance(account) 81 82
83 private Socket s 84 private Bank
bank 85
55
File BankClient.java
01 import java.io.BufferedReader 02 import
java.io.InputStream 03 import
java.io.InputStreamReader 04 import
java.io.IOException 05 import
java.io.OutputStream 06 import
java.io.PrintWriter 07 import
java.net.Socket 08 09 / 10 This program
tests the bank server. 11 / 12 public class
BankClient 13 14 public static void
main(String args) throws IOException 15
16 final int SBAP_PORT 8888 17
Socket s new Socket("localhost", SBAP_PORT)
56
18 InputStream in s.getInputStream() 19
OutputStream out s.getOutputStream() 20
BufferedReader reader new
BufferedReader( 21 new
InputStreamReader(in)) 22 PrintWriter
writer new PrintWriter(out) 23 24
String command "DEPOSIT 3 1000\n" 25
System.out.print("Sending " command) 26
writer.print(command) 27
writer.flush() 28 String response
reader.readLine() 29 System.out.println("R
eceiving " response) 30 31
command "WITHDRAW 3 500\n" 32
System.out.print("Sending " command) 33
writer.print(command) 34
writer.flush() 35 response
reader.readLine() 36 System.out.println("Re
ceiving " response)
57
  • 37
  • 38 command "QUIT\n"
  • 39 System.out.print("Sending "
    command)
  • 40 writer.print(command)
  • 41 writer.flush()
  • 42
  • 43 s.close()
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

58
URLConnection Class
  • Provides convenient support for HTTP
  • Can also handle FTP (file transfer protocol)
  • Takes care of socket connection for you
  • Makes it easy to communicate with a web server
    without giving HTTP commands

59
URL Connections
  • Construct a URL object from a URL starting with
    the http or ftp prefix
  • URL u new URL("http//java.sun.com/index.html
    ")
  • Use the URL's openConnection() method to get the
    URLConnection URLConnection connection
    u.openConnection()
  • Call the getInputStream method to obtain an input
    stream InputStream in connection.getInputStream(
    )
  • Construct a reader from the stream
  • BufferedReader in new BufferedReader(new
    InputStreamReader(in))

60
URL Connections
  • Use the reader to read a line at a time from
    the resource
  • boolean done false
  • while (!done)
  • String input reader.readLine()
  • if (input null)
  • done true
  • else do something with the input

61
HTTP Commands
  • command
  • request properties
  • blank line
  • HTTP command
  • Such as GET item HTTP/1.0
  • request properties
  • Such as If-Modified-Since
  • blank line
  • separates the command and its request properties
    from the input data

62
URLConnection Class
  • Has methods to set request properties
    connection.setIf ModifiedSince(date)
  • Set the request properties before calling
    getInputStream
  • The URLConnection class sends all the request
    properties that are set to the web server

63
Server Response
  • status line containing response code
  • response parameters
  • blank line
  • status line containing response code
  • HTTP/1.1 200 OK
  • HTTP/1.1 400 NOT FOUND
  • response parameters
  • There may be several lines of parameters
  • blank line
  • separates the status and response parameters from
    the requested data

64
Retrieving Response Code and Message
  • Cast the URLConnection object to the
    HttpConnection subclass
  • Get the response code with getResponseCode
  • Get the response message with
    getResponseMessage

65
Retrieve Other Response Information from
URLConnection
  • Content-Type
  • int length connection.getContentLength()
  • Content-Content
  • String type connection.getContentType()

66
File URLGet.java
01 import java.io.BufferedReader 02 import
java.io.InputStream 03 import
java.io.InputStreamReader 04 import
java.io.IOException 05 import
java.io.OutputStream 06 import
java.io.PrintWriter 07 import
java.net.HttpURLConnection 08 import
java.net.URL 09 import java.net.URLConnection 1
0 11 / 12 This program demonstrates how
to use an URL connection 13 to communicate
with a web server. Supply the URL on the 14
command-line, for example 15 java UrlGet
http//java.sun.com/index.html 16 / 17 public
class URLGet
67
18 19 public static void main(String
args) throws IOException 20 21 //
get command-line arguments 22 23 if
(args.length ! 1) 24 25
System.out.println("usage java UrlGet URL") 26
System.exit(0) 27 28 29
// open connection 30 31 URL u new
URL(args0) 32 URLConnection connection
u.openConnection() 33 34 // check if
response code is HTTP_OK (200) 35 36
HttpURLConnection httpConnection
(HttpURLConnection)connection 37 int code
httpConnection.getResponseCode() 38 if
(code ! HttpURLConnection.HTTP_OK)
68
39 40 String message
httpConnection.getResponseMessage() 41
System.out.println(code " " message) 42
return 43 44 45 // read
server response 46 47 InputStream in
connection.getInputStream() 48
BufferedReader reader new BufferedReader( 49
new InputStreamReader(in)) 50 51
boolean done false 52 while (!done) 53
54 String input
reader.readLine() 55 if (input
null) done true 56 else
System.out.println(input) 57 58
59
69
Dynamic Content
  • Content of many pages changes by the minute
  • Stock prices
  • Weather
  • These pages are not stored in files
  • When you request such a page
  • The web server starts the appropriate program
  • Supplies it with input from the request
  • Sends the output back

70
Request for Web Page with Dynamic Content
  • The web server knows this URL denotes a program
  • /server
  • /cgi-bin
  • The web server starts the appropriate program
  • Supplies it with input from the request
  • Sends the program's output back to the client

71
Form Data
  • There are two HTTP commands for supplying input
    to server-side programs
  • GET
  • POST
  • GET is simpler to use but can only be used for
    short inputs

72
GET
  • Input is appended after the program URL following
    a ?
  • Input is usually name/value pairs
  • Example GET Mach.usno.navy.mil/cgi-bin/aa_moonph
    ases?year2000 HTTP/1.0blank line
  • Multiple name/value pairs are separated by an
    ampersand()cityChicagozip60614

73
Encoding
  • GET and Post requests must both be encoded
  • The scheme is called URL encoding
  • Characters that are not ASCII letters or numbers
    are encoded
  • Spaces are encoded as character
  • Other bytes are encoded as xy where xy is the
    hexadecimal value of the byte
  • Use static methods URLEncoder.encode and
    URLDecoder.decode

74
POST
  • Use POST for longer inputs
  • Format
  • POST url
  • Content-Type type
  • Content-Length length
  • other request headers
  • blank line
  • input data
  • Most common source of POST request is the
    submission of HTML form data

75
POST
  • Don't format the POST request yourself
  • Use the URLConnection class

76
POST
  • Call setDoOutput method of URLConnection
  • Call getOutputStream
  • Send the data to that stream
  • You can send URL encoded name/value pairs
  • Close the output stream when you are done

77
PostZipQuery.java
  • The Program makes a ZIP code lookup by calling a
    server-side program hosted by US Postal Service
  • The program expect POST input of name/value
    format
  • o With a single name cytstzip
  • o And value of either a ZIP code or a city
    and state
  • Run the program from the command line
  • o java PostZipQuery Beverly Hills, CA

78
File PostZipQuery.java
01 import java.io.BufferedReader 02 import
java.io.InputStream 03 import
java.io.InputStreamReader 04 import
java.io.IOException 05 import
java.io.OutputStream 06 import
java.io.PrintWriter 07 import java.net.URL 08
import java.net.URLConnection 09 import
java.net.URLEncoder 10 11 / 12 This
program posts a query to a United States Postal
Service 13 server that can look up the ZIP
code for a city name. Supply 14 the city name
and an optional state on the command line, 15
such as 16 java PostZipQuery Los Angeles,
CA 17 /
79
  • 18 public class PostZipQuery
  • 19
  • 20 public static void main(String args)
    throws IOException
  • 21
  • 22 // concatenate all command line
    arguments
  • 23
  • 24 String input
  • 25 if (args.length gt 0)
  • 26
  • 27 input args0
  • 28 for (int i 1 i lt args.length
    i)
  • 29 input " " argsi
  • 30
  • 31 else
  • 32 input "90210"
  • 33
  • 34 // establish URL connection
  • 35

80
38 URLConnection connection
u.openConnection() 39 40 // send
POST data 41 42 connection.setDoOutput(tr
ue) 43 OutputStream out
connection.getOutputStream() 44
PrintWriter writer new PrintWriter(out) 45
writer.print("ctystzip" 46
URLEncoder.encode(input) "\n") 47
writer.close() 48 49 // print server
response 50 51 InputStream in
connection.getInputStream() 52
BufferedReader reader new BufferedReader(new 53
InputStreamReader(in)) 54 55
boolean done false 56 while (!done) 57

81
58 String inputLine
reader.readLine() 59 if (inputLine
null) 60 done true 61
else 62 System.out.println(inputLine)
63 64 reader.close() 65
66
Write a Comment
User Comments (0)
About PowerShow.com