practical socketjava
TRANSCRIPT
![Page 1: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/1.jpg)
TCP/IP Sockets in Java: Practical Guide for Programmers
Kenneth L. CalvertMichael J. Donahoo
![Page 2: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/2.jpg)
Computer Chat How do we make computers talk?
How are they interconnected?
Internet Protocol (IP)
![Page 3: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/3.jpg)
Internet Protocol (IP) Datagram (packet) protocol Best-effort service
Loss Reordering Duplication Delay
Host-to-host delivery
![Page 4: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/4.jpg)
IP Address 32-bit identifier Dotted-quad: 192.118.56.25 www.mkp.com -> 167.208.101.28 Identifies a host interface (not a
host)
192.18.22.13 209.134.16.123
![Page 5: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/5.jpg)
Transport Protocols
Best-effort not sufficient!
Add services on top of IP User Datagram Protocol (UDP)
Data checksum Best-effort
Transmission Control Protocol (TCP) Data checksum Reliable byte-stream delivery Flow and congestion control
![Page 6: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/6.jpg)
Ports
Identifying the ultimate destination
IP addresses identify hosts Host has many applications Ports (16-bit identifier)
192.18.22.13
Port 80 25 23
Application WWW E-mail Telnet
![Page 7: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/7.jpg)
Sockets Identified by protocol and local/remote
address/port Applications may refer to many sockets
![Page 8: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/8.jpg)
Client: Initiates the connection
Server: Passively waits to respond
Clients and Servers
Client: Bob
“Hi. I’m Bob.”
“Nice to meet you, Jane.”
Server: Jane
“Hi, Bob. I’m Jane”
![Page 9: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/9.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Server starts by getting ready to receive client connections…
![Page 10: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/10.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
ServerSocket servSock = new ServerSocket(servPort);
![Page 11: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/11.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
for (;;) { Socket clntSock = servSock.accept();
![Page 12: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/12.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Server is now blocked waiting for connection from a client
![Page 13: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/13.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Later, a client decides to talk to the server…
![Page 14: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/14.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Socket socket = new Socket(server, servPort);
![Page 15: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/15.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
OutputStream out = socket.getOutputStream(); out.write(byteBuffer);
![Page 16: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/16.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Socket clntSock = servSock.accept();
![Page 17: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/17.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Communicate3. Close the connection
Server1. Create a TCP socket2. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
InputStream in = clntSock.getInputStream(); recvMsgSize = in.read(byteBuffer);
![Page 18: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/18.jpg)
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
close(sock); close(clntSocket)
![Page 19: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/19.jpg)
TCP Tidbits
Clientout.write(“Hello Bob”)
in.read() -> “Hi Jane”
Server
in.read() -> “Hello ”in.read() -> “Bob”out.write(“Hi ”)out.write(“Jane”)
Client knows server address and port No correlation between send() and recv()
![Page 20: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/20.jpg)
Closing a Connection close() used to delimit communication Analogous to EOF
Clientout.write(string)
while (not received entire string)in.read(buffer)out.write(buffer)
close(socket)
Server
in.read(buffer)while(client has not closed
connection)out.write(buffer)in.read(buffer)
close(client socket)
![Page 21: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/21.jpg)
Constructing Messages
…beyond simple strings
![Page 22: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/22.jpg)
TCP/IP Byte Transport TCP/IP protocols transports bytes
Application protocol provides semantics
Application
TCP/IP
byte stream
Application
TCP/IP
byte streamHere are
some bytes. I don’t know what they
mean.
I’ll pass these to the app. It knows what to
do.
![Page 23: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/23.jpg)
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
![Page 24: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/24.jpg)
Primitive Types String
Character encoding: ASCII, Unicode, UTF Delimit: length vs. termination character
M o m \n
3 77 111 109
0 77 0 111 0 109 0 10
![Page 25: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/25.jpg)
Integer Strings of character encoded decimal
digits
Advantage: 1. Human readable2. Arbitrary size
Disadvantage: 1. Inefficient2. Arithmetic manipulation
Primitive Types
49 55 57 57 56 55 48 10
‘1’ ‘7’ ‘9’ ‘9’ ‘8’ ‘7’ ‘0’ \n
![Page 26: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/26.jpg)
Primitive Types Integer
Native representation
Network byte order (Big-Endian) Use for multi-byte, binary data exchange htonl(), htons(), ntohl(), ntohs()
0 0 92 246 4-bytetwo’s-complement integer
23,798
246 92 0 0Big-Endian
Little-Endian
![Page 27: Practical socketjava](https://reader035.vdocuments.net/reader035/viewer/2022062513/55561be5d8b42a3f168b54cf/html5/thumbnails/27.jpg)
Message Composition Message composed of fields
Fixed-length fields
Variable-length fields
integer short short
M i k e 1 2 \n