Week 5 Socket Programming
Week 5 Socket Programming
Socket Programming
Topic & Structure of The
Lesson
• Real world socket
• Socket with UDP
• Socket with TCP
• Socket reference
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
iinFromServer
outToServer
• server converts line to
uppercase, sends back to client
• client reads, prints modified
line from socket
inFromUser
(inFromServer stream)
client socket
write reply to
connectionSocket read reply from
connectionSocket
close
connectionSocket close
clientSocket
sentence = inFromUser.readLine();
Send line
to server outToServer.writeBytes(sentence + '\n');
clientSocket.close();
}
}
class TCPServer {
write reply to
serverSocket
specifying client read reply from
host address, clientSocket
port number close
clientSocket
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);
datagra
m
CT024-3-3 Distributed Computer Systems Socket Programming 19 of 55
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 client connection
CT024-3-3 Distributed Computer Systems Socket Programming 20 of 55
Summary on Application Layer
Our study of network apps now
• complete!
application service specific protocols:
requirements: http
– reliability, bandwidth, ftp
delay smtp, pop3
• client-server paradigm dns
• Internet transport socket programming
service model client/server
– connection-oriented, implementation
reliable: TCP using tcp, udp sockets
– unreliable, datagrams:
UDP
• Socket pair
– Specified the two end points that uniquely identifies each TCP
connection in an internet.
– 4-tuple: (client IP address, client port number, server IP
address, server port number)
• Client
– Client socket
• Initiate a TCP connection to the server by creating a socket
object. (Three-way handshake)
• Specify the address of the server process, namely, the IP
address of the server and the port number of the process.
recv( )
send( )
close( ) close( )
controlled by
application process
process
developer socket
socket
controlled by TCP with
TCP with
operating buffers, internet
system buffers,
variables
variables
CT024-3-3 Distributed Computer Systems Socket Programming 30 of 55
Socket programming with TCP
keyboard monitor
Example client-server
app:
inFromUser
input
• client reads line from stream
inFromServer
outToServer
output input
stream stream
• server converts line to
uppercase, sends back to client TCP
clientSocket
client socket TCP
• client reads, prints socket
(inFromServer stream)
CT024-3-3 Distributed Computer Systems Socket Programming 31 of 55
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
– java.net.ServerSocket
• Implements server sockets.
• Waits for requests to come in over the network.
• Performs some operation based on the request.
• Constructor and Methods
– ServerSocket(int port)
– Socket Accept(): Listens for a connection to be made to this socket
and accepts it. This method blocks until a connection is made.
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
BufferedReader inFromUser =
new BufferedReader(new
InputStreamReader(System.in));
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
clientSocket.close();
}
}
while(true) {
Socket connectionSocket =
welcomeSocket.accept();
InputStreamReader(connectionSocket.getInputStream()));
CT024-3-3 Distributed Computer Systems Socket Programming 36 of 55
TCPServer.java
DataOutputStream outToClient =
new
DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
outToClient.writeBytes(capitalizedSentence);
}
}
}
write reply to
serverSocket
specifying client read reply from
host address, clientSocket
port umber close
clientSocket
inFromUser
input
stream
Client
Process
Input: receives
process
packet (TCP
received “byte
Output: sends
stream”)
packet (TCP sent
receivePacket
sendPacket
“byte stream”) UDP UDP
packet packet
client UDP
clientSocket
socket UDP
socket
• In Package java.net
– java.net.DatagramSocket
• A socket for sending and receiving datagram
packets.
• Constructor and Methods
– DatagramSocket(int port): Constructs a datagram
socket and binds it to the specified port on the
local host machine.
– void receive( DatagramPacket p)
– void send( DatagramPacket p)
– void close()
clientSocket.close();
}
}
CT024-3-3 Distributed Computer Systems Socket Programming 43 of 55
UDPServer.java
import java.io.*;
import java.net.*;
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)
{
DatagramPacket receivePacket =
new DatagramPacket(receiveData,
receiveData.length);
serverSocket.receive(receivePacket);
CT024-3-3 Distributed Computer Systems Socket Programming 44 of 55
UDPServer.java
}
}
}
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient =
new
DataOutputStream(connectionSocket.getOutputStream());
CT024-3-3 Distributed Computer Systems Socket Programming 47 of 55
WebServer.java
requestMessageLine = inFromClient.readLine();
StringTokenizer tokenizedLine =
new StringTokenizer(requestMessageLine);
if (tokenizedLine.nextToken().equals("GET")){
fileName = tokenizedLine.nextToken();
if (fileName.startsWith("/") == true )
fileName = fileName.substring(1);
inFile.read(fileInBytes);
CT024-3-3 Distributed Computer Systems Socket Programming 48 of 55
WebServer.java
outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n");
if (fileName.endsWith(".jpg"))
outToClient.writeBytes("Content-Type: image/jpeg\r\n");
if (fileName.endsWith(".gif"))
outToClient.writeBytes("Content-Type: image/gif\r\n");
outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes, 0, numOfBytes);
connectionSocket.close();
}
else System.out.println("Bad Request Message");
}
}
Java-tutorials:
• “All About Sockets” (Sun tutorial),
http://www.javaworld.com/javaworld/jw-12-1996/jw-
12-sockets.html
• “Socket Programming in Java: a tutorial,”
http://www.javaworld.com/javaworld/jw-12-1996/jw-
12-sockets.html
CT024-3-3 Distributed Computer Systems Socket Programming 52 of 55
Summary of last section
Q&A