UDP:
Contrary to TCP, UDP is connection less and unreliable protocol. Connection less means before sending data we do not establish the connection between server and client, we just send the data right away.
This protocol is unreliable because when the data do not reach the destination, this protocol will not let the sender know about it. Then obviously one question arises : Then why we have such protocol ?
The answer is very simple, there are certain situation where we use UDP because of its speed.
The below code simulation shows how UDP server and client work..
Client sends some alphabets to server and server returns them in sorted order.
Contrary to TCP, UDP is connection less and unreliable protocol. Connection less means before sending data we do not establish the connection between server and client, we just send the data right away.
This protocol is unreliable because when the data do not reach the destination, this protocol will not let the sender know about it. Then obviously one question arises : Then why we have such protocol ?
The answer is very simple, there are certain situation where we use UDP because of its speed.
- In Telecommunication: As UDP is very fast, we just want the voice to reach and little bit of data loss do not hamper the call.
- In DNS UDP is used.
- In transmitting multicast packets.
The below code simulation shows how UDP server and client work..
Client sends some alphabets to server and server returns them in sorted order.
UDP Server Code:
import java.io.IOException; import java.net.*; import java.util.Arrays; public class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(1027); // open UDP socket serverSocket.setSoTimeout(100000); // setting time out for server socket byte[] receiveData = new byte[1024]; // to receive data byte[] sendData = new byte[1024]; // to send data System.out.println("UDP Server Started.."); while(true) // to listen the client continuously { try { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); // blocks until packet is received String data = new String( receivePacket.getData()); System.out.println("RECEIVED: " + data); // getting ip address of client InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); // getting port of client //sort data data = data.replaceAll(" ", ""); char[] arr = data.trim().toCharArray(); Arrays.sort(arr); data = ""; for(char c: arr) data += c; System.out.println("SENDING: " + data); //sending data back to client sendData = data.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } catch(SocketTimeoutException s) { System.out.println("UDP Socket timed out!"); serverSocket.close(); break; } catch(IOException e) { e.printStackTrace(); break; } } } }
The code is self descriptive, read the comments in the code.
UDP Client Code:
import java.net.*; public class UDPClient { public static void main(String[] args) throws Exception { // Creating socket DatagramSocket clientSocket = new DatagramSocket(); // Getting server ip address InetAddress IPAddress = InetAddress.getByName("localhost"); // Arrays for sending and receiving data byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; // Sending data to server String payload = "Z X C V B N M A S D F G"; sendData = payload.getBytes(); // preparing header DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1027); clientSocket.send(sendPacket); // sending data // Getting data from sever DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); // receiving data String dataFromSever = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + dataFromSever); clientSocket.close(); // close connection } }
What is socket:
Socket is combination of port number and ip address. It is used to distinguish between different processes on a computer.
Meaning, using IP address we can just distinguish one computer but what about the different processes running inside. For that a combination of port and IP address is used.
How this program works:
First run UDP Server program then client program, you will get below output:
FROM SERVER:ABCDFGMNSVXZ
Comments
Post a Comment