Chapter 2 Application Layer: Socket Programming

Chapter 2
Application Layer:
Socket Programming

Jaringan Komputer
Jurusan Ilmu Komputer/ Informatika
Universitas Diponegoro
2012/2013

Computer Networking:
A Top Down Approach,
5th edition.
Jim Kurose, Keith Ross
Addison-Wesley, April
2009.

2: Application Layer

1

Network Applications

1.

Protocol standard defined  RFC


RFC 959  FTP

2. Proprietary

single developer  client-server
 Not to use one of the well-known port numbers
defined in the RFC.


T C P or UDP ?
T C P  connection oriented, reliable
 UDP  connectionless, unreliable


2: Application Layer


2

Example of
Client Server Communication

2: Application Layer

3

Socket programming
Goal: learn how to build client/server application that
communicate using sockets
Socket API
 introduced in BSD4.1 UNIX,

1981
 explicitly created, used,
released by apps
 client/server paradigm

 two types of transport
service via socket API:



UDP
TCP

socket
An application-created,
OS-controlled interface
(a “door”) into which
application process can
both send and
receive messages to/from
another application
process

2: Application Layer


4

Socket programming basics
 Server must be

running before
client can send
anything to it.
 Server must have a
socket (door)
through which it
receives and sends
segments
 Similarly client
needs a socket

 Socket is locally

identified with a port
number



Analogous to the apt #
in a building

 Client needs to know

server IP address and
socket port number.

2: Application Layer

5

Chapter 2: Application layer
 2.1 Principles of

 2.6 P2P applications

network applications

 2.2 Web and HTTP
 2.3 FTP (skip)
 2.4 Electronic Mail

(skip)
 2.7 Socket programming
with TCP
 2.8 Socket programming
with UDP



SMTP, POP3, IMAP

 2.5 DNS

2: Application Layer

6


Socket-programming using TCP
TCP service: reliable transfer of bytes from one
process to another

controlled by
application
developer
controlled by
operating
system

process

process

socket
TCP with
buffers,
variables


socket
TCP with
buffers,
variables

host or
server

internet

controlled by
application
developer
controlled by
operating
system

host or
server
2: Application Layer


7

Socket programming with TCP
Client must contact server
 server process must first
be running
 server must have created
socket (door) that
welcomes client’s contact
Client contacts server by:
 creating client-local TCP
socket
 specifying IP address, port
number of server process
 When client creates
socket: client TCP
establishes connection to
server TCP


 When contacted by client,

server TCP creates new
socket for server process to
communicate with client
 allows server to talk with
multiple clients
 source port numbers
used to distinguish
clients (more in Chap 3)
application viewpoint

TCP provides reliable, in-order
transfer of bytes (“pipe”)
between client and server
2: Application Layer

8

Client Socket, Welcoming Socket,

and Connection Socket

2: Application Layer

9

Client/server socket interaction: TCP
Server (running on hostid)

Client

create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()

TCP

wait for incoming
connection request connection
connectionSocket =
welcomeSocket.accept()
read request from
connectionSocket
write reply to
connectionSocket
close
connectionSocket

setup

create socket,
connect to hostid, port=x
clientSocket =
Socket()
send request using
clientSocket

read reply from
clientSocket
close
clientSocket

2: Application Layer

10

Stream jargon

Client
Process
process

output
stream

monitor

inFromUser

input
stream

outToServer

characters that flow into or
out of a process.
 An input stream is attached to
some input source for the
process, e.g., keyboard or
socket.
 An output stream is attached
to an output source, e.g.,
monitor or socket.
 The DataOutputStream class
has some methods to convert
(and send out) data into any
primitif data type, depend on
our need; Such as byte,
integer, char, etc

keyboard

inFromServer

 A stream is a sequence of

input
stream

client
TCP
clientSocket
socket
to network

TCP
socket

from network

2: Application Layer

11

Socket programming with TCP
Example client-server app:
1) client reads line from
standard input (inFromUser
stream) , sends to server via
socket (outToServer
stream)
2) server reads line from socket
3) server converts line to
uppercase,
4) Server sends back to client
4) client reads, prints modified
line from socket
(inFromServer stream)
2: Application Layer

12

Example: Java client (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
Create
input stream
Create
client socket,
connect to server
Create
output stream
attached to socket

BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
2: Application Layer

13

Example: Java client (TCP), cont.
Create
input stream
attached to socket

BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();

Send line
to server

outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();

Read line
from server

System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
2: Application Layer

14

Example: Java server (TCP)
import java.io.*;
import java.net.*;

class TCPServer {

Create
welcoming socket
at port 6789
Wait, on welcoming
socket for contact
by client
Create input
stream, attached
to socket

public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));

2: Application Layer

15

Example: Java server (TCP), cont
Create output
stream, attached
to socket

DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());

Read in line
from socket

clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';

Write out line
to socket

outToClient.writeBytes(capitalizedSentence);
}
}

}

End of while loop,
loop back and wait for
another client connection

2: Application Layer

16

TCP observations & questions
 Server has two types of sockets:
 ServerSocket and Socket
 When client knocks on serverSocket’s “door,”

server creates connectionSocket and completes
TCP conx.
 Dest IP and port are not explicitly attached to
segment.
 Can multiple clients use the server?

2: Application Layer

17

Chapter 2: Application layer
 2.1 Principles of

 2.6 P2P applications

network applications
 2.2 Web and HTTP
 2.3 FTP (skip)
 2.4 Electronic Mail

(skip)
 2.7 Socket programming
with TCP
 2.8 Socket programming
with UDP



SMTP, POP3, IMAP

 2.5 DNS

2: Application Layer

18

Socket programming with UDP
UDP: no “connection” between
client and server
 no handshaking
 sender explicitly attaches
IP address and port of
destination to each segment
 OS attaches IP address and
port of sending socket to
each segment
 Server can extract IP
address, port of sender
from received segment

application viewpoint

UDP provides unreliable transfer
of groups of bytes (“datagrams”)
between client and server

Note: the official terminology
for a UDP packet is “datagram”.
In this class, we instead use “UDP
segment”.
2: Application Layer

19

Running example
 Client:

User types line of text
 Client program sends line to server


 Server:

Server receives line of text
 Capitalizes all the letters
 Sends modified line to client


 Client:
 Receives line of text
 Displays
2: Application Layer

20

Client/server socket interaction: UDP
Server (running on hostid)
create socket,
port= x.
serverSocket =
DatagramSocket()

read datagram from
serverSocket
write reply to
serverSocket
specifying
client address,
port number

Client
create socket,
clientSocket =
DatagramSocket()

Create datagram with server IP and
port=x; send datagram via
clientSocket

read datagram from
clientSocket
close
clientSocket

2: Application Layer

21

Example: Java client (UDP)
input
stream

Client
process

monitor

inFromUser

keyboard

Process

Input: receives

packet (recall
thatTCP received
“byte stream”)

UDP
packet

receivePacket

packet (recall
that TCP sent
“byte stream”)

sendPacket

Output: sends
UDP
packet

client
UDP
clientSocket
socket
to network

UDP
socket

from network

2: Application Layer

22

Example: Java client (UDP)
import java.io.*;
import java.net.*;

Create
input stream
Create
client socket
Translate
hostname to IP
address using DNS

class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();

InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();

sendData = sentence.getBytes();
2: Application Layer

23

Example: Java client (UDP), cont.
Create datagram
with data-to-send,
length, IP addr, port

Send datagram
to server

DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);

clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);

Read datagram
from server

clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
2: Application Layer

24

Example: Java server (UDP)
import java.io.*;
import java.net.*;

Create
datagram socket
at port 9876

class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{

Create space for
received datagram
Receive
datagram

DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
2: Application Layer

25

Example: Java server (UDP), cont
String sentence = new String(receivePacket.getData());

Get IP addr
port #, of
sender

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();

Create datagram
to send to client

DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);

Write out
datagram
to socket

serverSocket.send(sendPacket);
}

}
}

End of while loop,
loop back and wait for
another datagram

2: Application Layer

26

UDP observations & questions
 Both client server use DatagramSocket
 Dest IP and port are explicitly attached to

segment.
 What would happen if change both clientSocket
and serverSocket to “mySocket”?
 Can the client send a segment to server without
knowing the server’s IP address and/or port
number?
 Can multiple clients use the server?
2: Application Layer

27

Appendix
 Java Network Programming

 Java I/O byte stream
 Java I/O char stream
 High level class in stream chaining

2: Application Layer

28

Java Network Programming
 Java.io

InputStream, OutputStream  byte
 Reader, Writer  text


 Java.net
 TCP Programming
• Java.net.Socket  client, server
• Java.net.ServerSocket  server


UDP Programming
• Java.net.DatagramSocket  client, server
• Java.net.DatagramPacket  create packet

2: Application Layer

29

Java I/O
byte streams

Java I/O
char streams

High Level Class
In Stream Chaining