Skip to main content

UDP Client and Server program in Java

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.

  1. 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.
  2. In DNS UDP is used.
  3. 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

Popular posts from this blog

Goodness of Fit Test for normal and poisson distribution

Meaning of Goodness of fit test: We find out which distribution fits the sample data the most. And this is achieved using chi-square distribution (Snedecor and Cochran, 1989). How to apply: There are 4 steps to follow: State the hypothesis:  Data follows a distribution or not Criteria to reject null hypothesis: if Χ 2  > Χ 2 (k,1-α) then reject null hypothesis. Analyze sample data: Compute the chi-square value using below formula: ∑(Oi- Ei) 2 /Ei        : Oi is observed frequency and Ei is expected frequency Interpret the results: Declare the results after comparing the values of Χ 2 and Χ 2 (k,1-α), where k is degree of freedom and  α is significance level. Degree of Freedom: It is  =  n - 1 - m m: number of parameter in the distribution. So in case of normal distribution m is 2 ( μ ,α) and in case of poisson dist. m is = 1 ( λ). Example 1: Goodness of fit test for Normal Distribution Year wise d...

Bounding Rank of Fibonacci Heap

Bounding Rank of Fibonacci Heap to lgn: Before understanding the concept see below notations, tree(H)=number of nodes in the root list in below Fibonacci Heap Example rank(x)=number of children it has rank(H)=max rank(x)  Note: Black nodes are marked nodes (when one of its children is deleted it is marked if it is not already marked). We have following operation in Fibonacci Heap: Insert - O(1) Union - O(1) Decrease Key - O(1) Delete-Min - O(Rank(H)) = O(lgn) Delete - O(Rank(H)) = O(lgn) In this blog we will see how the rank is bounded to be lgn . So some assumptions I have made that you know at a time we cannot delete >1 child of any node. And after deleting child of a node we make it as Marked Node  if it is not marked already. Some Background; Merge Operation: We do merge operation when we do delete minimum. Merge operation is when rank of two nodes is same, we merge them as making minimum of them as root node and o...

Reliable User Datagram Protocol

RUDP provides  a solution where UDP  is too primitive because guaranteed-order  p acket  delivery is desirable, but  T CP  adds too much overhead.  In order for RUDP to gain higher Quality of Service , RUDP implements features that are similar to TCP with less overhead. Implementations: In order to ensure quality, it extends UDP by means of adding the following features: Acknowledgment of received packets Flow control Re-transmission of lost packets Over buffering (Faster than real-time streaming) RUDP is not currently a formal standard, however it was described in an n 1999. It has not been proposed for standardization. Working Example: One way to think about how RUDP types of transport work is to use a basic model where all the data is sent in UDP format, and each missing packet is indexed.  Once the main body of the transfer is done, the recipient sends the sender the index list and the sender re-transmits ...