Socket Programming Tutorial
Socket Programming Tutorial
Tutorial
Chapter 2: Application layer
• 2.1 Principles of • 2.6 P2P file sharing
network applications • 2.7 Socket
• 2.2 Web and HTTP programming with
• 2.3 FTP TCP
• 2.4 Electronic Mail • 2.8 Socket
– SMTP, POP3, IMAP programming with
• 2.5 DNS UDP
Socket programming
Goal: learn how to build client/server application that
communicate using sockets
Socket API socket
• introduced in BSD4.1 UNIX, 1981
a host-local,
• explicitly created, used, released
application-created,
by apps
OS-controlled interface
• client/server paradigm (a “door”) into which
• two types of transport service via application process can
socket API: both send and
– unreliable datagram receive messages to/from
– reliable, byte stream-oriented another application
process
Socket-programming using TCP
Socket: a door between application process and end-end-
transport protocol (UCP or TCP)
TCP service: reliable transfer of bytes from one process to
another
controlled by
controlled by process application
application process
developer
developer socket socket
controlled by TCP with TCP with controlled by
buffers, operating
operating buffers, internet system
system variables variables
host or host or
server server
Socket programming with TCP
Client must contact server • When contacted by client,
• server process must first be server TCP creates new
running socket for server process to
• server must have created communicate with client
socket (door) that welcomes – allows server to talk with
client’s contact multiple clients
Client contacts server by: – source port numbers used
• creating client-local TCP to distinguish clients (more
socket in Chap 3)
• specifying IP address, port
number of server process application viewpoint
• When client creates socket: TCP provides reliable, in-order
client TCP establishes transfer of bytes (“pipe”)
connection to server TCP between client and server
Client/server socket interaction: TCP
Server (running on hostid) Client
create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()
write reply to
connectionSocket read reply from
clientSocket
close
connectionSocket close
clientSocket
Stream jargon
keyboard monitor
• A stream is a sequence
of characters that flow
inFromUser
input
into or out of a process. stream
Client
• An input stream is Process
process
attached to some input
source for the process,
e.g., keyboard or socket.
inFromServer
• An output stream is
outToServer
output input
stream stream
attached to an output
source, e.g., monitor or client
clientSocket
TCP
socket
socket. TCP
socket
sentence = inFromUser.readLine();
Send line
to server outToServer.writeBytes(sentence + '\n');
clientSocket.close();
}
}
Example: Java server (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
create socket,
port=x, for create socket,
clientSocket =
incoming request: DatagramSocket()
serverSocket =
DatagramSocket()
Create, address (hostid, port=x,
send datagram request
using clientSocket
read request from
serverSocket
write reply to
serverSocket
specifying client read reply from
host address, clientSocket
port number close
clientSocket
Example: Java client (UDP)
keyboard monitor
inFromUser
input
stream
Client
Process
Input: receives pac
process
ket (recall thatTC
Output: sends P received “byte s
packet (recall tream”)
receivePacket
sendPacket
that TCP sent UDP
packet
UDP
packet
“byte stream”)
client
clientSocket UDP
socket UDP
socket
class UDPClient {
public static void main(String args[]) throws Exception
{
Create
input stream BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Create
client socket DatagramSocket clientSocket = new DatagramSocket();
Translate
InetAddress IPAddress = InetAddress.getByName("hostname");
hostname to IP
address using DNS byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
class UDPServer {
public static void main(String args[]) throws Exception
Create {
datagram socket
DatagramSocket serverSocket = new DatagramSocket(9876);
at port 9876
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
Create space for
DatagramPacket receivePacket =
received datagram
new DatagramPacket(receiveData, receiveData.length);
Receive serverSocket.receive(receivePacket);
datagram
Example: Java server (UDP), cont
String sentence = new String(receivePacket.getData());
Get IP addr
InetAddress IPAddress = receivePacket.getAddress();
port #, of
sender int port = receivePacket.getPort();
sendData = capitalizedSentence.getBytes();
Create datagram
DatagramPacket sendPacket =
to send to client new DatagramPacket(sendData, sendData.length, IPAddress,
port);
Write out
datagram serverSocket.send(sendPacket);
to socket }
}
} End of while loop,
loop back and wait for
another datagram