Network Programming Using Sockets: Message Layers
Network Programming Using Sockets: Message Layers
Network Programming Using Sockets: Message Layers
TCP/IP layers
Layers Application
Message
Messages (UDP) or Streams (TCP) Transport UDP or TCP packets Internet IP datagrams Network interface Network-specific frames Underlying network
Network Programming
Application TCP IP
Application UDP
Network Programming
Socket programming
Goal: learn how to build client/server application that communicate using sockets Socket API
r introduced in BSD4.1 UNIX,
socket
a host-local, applicationcreated/owned, OS-controlled interface (a door) into which application process can both send and receive messages to/from another (remote or local) application process
1981 r explicitly created, used, released by apps r client/server paradigm r two types of transport service via socket API: m unreliable datagram m reliable, byte streamoriented
Network Programming
socket
any port
message client other ports Internet address = 138.37.94.248 Internet address = 138.37.88.249 server
Network Programming
Network Programming
be running r server must have created socket (door) that welcomes clients contact Client contacts server by: r creating client-local TCP socket r specifying IP address, port number of server process
server TCP creates new socket for server process to communicate with client m allows server to talk with multiple clients
application viewpoint TCP provides reliable, in-order transfer of bytes (pipe) between client and server
Network Programming 7
standard input (inFromUser stream) , sends to server via socket (outToServer stream) r server reads line from socket r server converts line to uppercase, sends back to client r client reads, prints modified line from socket (inFromServer stream)
Input stream: sequence of bytes into process Output stream: sequence of bytes out of process
iinFromServer
8
inFromUser
client socket
Network Programming
outToServer
Server
(running on hostid)
Client
create socket, port=x, for incoming request: welcomeSocket = ServerSocket () wait for incoming connection request connection connectionSocket = welcomeSocket .accept()
TCP
setup
create socket, connect to hostid, port=x clientSocket = Socket() send request using clientSocket
Network Programming
10
Requesting a connection
s = socket(AF_INET, SOCK_STREAM,0)
connect(s, ServerAddress)
Network Programming
11
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 ());
Network Programming
12
Create welcoming socket at port 6789 Wait, on welcoming socket for contact by client Create input stream, attached to socket
Network Programming
14
Create output stream, attached to socket Read in line from socket Write out line to socket } }
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } End of while loop, loop back and wait for another client connection
Network Programming
15
IP address and port of destination r server must extract IP address, port of sender from received datagram
application viewpoint UDP provides unreliable transfer of groups of bytes (datagrams) between client and server
Network Programming
16
Server
(running on hostid)
Client
create socket, clientSocket = DatagramSocket ()
read request from serverSocket write reply to serverSocket specifying client host address, port umber
Network Programming
17
Sending a message
s = socket(AF_INET, SOCK_DGRAM, 0)
Receiving a message
s = socket(AF_INET, SOCK_DGRAM, 0) bind(s, ServerAddress) amount = recvfrom(s, buffer, from)
Network Programming
18
import java.io.*; import java.net.*; 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();
Network Programming 19
Create input stream Create client socket Translate hostname to IP address using DNS
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); }
}
Network Programming 20
10
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) {
InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes();
End of while loop, loop back and wait for another datagram
Network Programming 22
11