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