TCP/IP Sockets in Java: Practical Guide for Programmers
Kenneth L. Calvert Michael J. Donahoo
Computer Chat
!
How do we make computers talk?
How are they interconnected?
Internet Protocol (IP)
Internet Protocol (IP)
! !
Datagram (packet) protocol Best-effort service
! ! ! !
Loss Reordering Duplication Delay
Host-to-host delivery
IP Address
! ! ! !
32-bit identifier Dotted-quad: [Link] [Link] -> [Link] Identifies a host interface (not a host)
[Link]
[Link]
Transport Protocols
Best-effort not sufficient!
! !
Add services on top of IP User Datagram Protocol (UDP)
! !
Data checksum Best-effort Data checksum Reliable byte-stream delivery Flow and congestion control
Transmission Control Protocol (TCP)
! ! !
Ports
Identifying the ultimate destination
! ! !
IP addresses identify hosts Host has many applications Ports (16-bit identifier)
Application Port WWW 80 E-mail 25 Telnet 23
[Link]
Sockets
!
Identified by protocol and local/remote address/port Applications may refer to many sockets
Clients and Servers
!
Client: Initiates the connection
Client: Bob Hi. Im Bob. Hi, Bob. Im Jane Server: Jane
Nice to meet you, Jane.
!
Server: Passively waits to respond
TCP Client/Server Interaction
Server starts by getting ready to receive client connections Server
" # $#
" # $# %#
Client Create a TCP socket Communicate Close the connection
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
!"#$"#!%&'"()*"#$!%&')+ ),"- )!"#$"#!%&'"(. *"#$/%#(0 1
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
2%#). 1 1 0 )3 ))))!%&'"()&4,(!%&')+ )))*"#$!%&'5 6&&"7 (. 0 1
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
Server is now blocked waiting for connection from a client
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
Later, a client decides to talk to the server
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
!%&'"()*%&'"()+ ),"- )!%&'"(. *"#$"#8)*"#$/%#(0 1
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
9:(7 :(!(#"6; )%:()+ )*%&'"(5< "(9:(7 :(!(#"6; . 0 1 %:(5 - #=(". > ?("@:22"#0 1
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
!%&'"()&4,(!%&')+ )))*"#$!%&'5 6&&"7 (. 0 1
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
A,7 :(!(#"6; )=,)+ )&4,(!%&'5 < "(A,7 :(!(#"6; . 0 1 #"&$B*< !=C")+ )=,5 #"6D . > ?("@:22"#0 1
" # $# %#
Client Create a TCP socket Communicate Close the connection
Server
" # $#
Create a TCP socket Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Client/Server Interaction
close(sock); close(clntSocket)
" # $# %# ) #
Client Create a TCP socket Establish connection Communicate Close the connection
" # $# %# ) #
Server Create a TCP socket Bind socket to a port Set socket to listen Repeatedly: & # Accept new connection ' # Communicate ( # Close the connection
TCP Tidbits
! !
Client knows server address and port No correlation between send() and recv()
Client
[Link](Hello Bob)
Server
[Link]() -> Hello [Link]() -> Bob [Link](Hi ) [Link](Jane)
[Link]() -> Hi Jane
Closing a Connection
! !
close() used to delimit communication Analogous to EOF
Client
[Link](string) while (not received entire string) [Link](buffer) [Link](buffer) close(socket)
Server
[Link](buffer) while(client has not closed connection) [Link](buffer) [Link](buffer)
close(client socket)
Constructing Messages
beyond simple strings
TCP/IP Byte Transport
!
TCP/IP protocols transports bytes
Application
byte stream Here are some bytes. I dont know what they mean.
Application
byte stream Ill pass these to the app. It knows what to do.
TCP/IP
TCP/IP
Application protocol provides semantics
Application Protocol
! !
Encode information in bytes Sender and receiver must agree on semantics Data encoding
! !
Primitive types: strings, integers, and etc. Composed types: message with fields
Primitive Types
!
String
! !
Character encoding: ASCII, Unicode, UTF Delimit: length vs. termination character
77 M 0 o 111 111 0 m 109 109 0 \n 10
77
Primitive Types
!
Integer
!
Strings of character encoded decimal digits
55 7
!
49 1
57 9
57 9
56 8
55 7
48 0
10 \n
Advantage: Disadvantage:
1. Human readable 2. Arbitrary size 1. Inefficient 2. Arithmetic manipulation
Primitive Types
!
Integer
!
Native representation
0 0 92 246 23,798 4-byte twos-complement integer
Little-Endian
Big-Endian
!
246
92
Network byte order (Big-Endian)
! !
Use for multi-byte, binary data exchange htonl(), htons(), ntohl(), ntohs()
Message Composition
!
Message composed of fields
!
Fixed-length fields integer short short
Variable-length fields i k e 1 2 \n