Saturday, February 15, 2014

Simple example of UDP Client/Server communication

It's a simple example to implement UDP Client/Server in Java. To test the function, start JavaUDPServer with port number in Terminal. The server will open a DatagramSocket and wait for incoming message from client. Then start JavaUDPClient with IP address and port number in another Terminal, then enter anything. The user input will be sent to JavaUDPServer via UDP socket, when JavaUDPServer receive the message, it will echo back to JavaUDPClient, then both JavaUDPServer and JavaUDPClient close the socket.

JavaUDPServer

JavaUDPClient

JavaUDPServer.java
package javaudpserver;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @web http://java-buddy.blogspot.com/
 */
public class JavaUDPServer {
    
    private static DatagramSocket datagramSocket;

    private static final int BUFFER_SIZE = 1024;
    private static byte[] buffer;

    public static void main(String[] args) {
        if (args.length != 1) {
            System.out.println("usage: java -jar JavaUDPServer.jar <port>");
            System.exit(1);
        }
        
        int port = Integer.parseInt(args[0]);
        System.out.println("Port: " + port);
        try {
            datagramSocket = new DatagramSocket(port);
            
            buffer = new byte[BUFFER_SIZE];
            
            DatagramPacket in_datagramPacket = new DatagramPacket(
                    buffer, BUFFER_SIZE);
            datagramSocket.receive(in_datagramPacket);
            
            InetAddress clientAddress = in_datagramPacket.getAddress();
            int clientPort = in_datagramPacket.getPort();
            
            String in_message = new String(
                    in_datagramPacket.getData(), 
                    0, 
                    in_datagramPacket.getLength());
            System.out.println("received: " + in_message);
            
            String out_messagae = "echo: " + in_message;
            DatagramPacket out_datagramPacket= new DatagramPacket(
                    out_messagae.getBytes(), 
                    out_messagae.length(), 
                    clientAddress, 
                    clientPort);
            datagramSocket.send(out_datagramPacket);
            
        } catch (SocketException ex) {
            Logger.getLogger(JavaUDPServer.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(JavaUDPServer.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            datagramSocket.close();
        }

    }
    
}


JavaUDPClient.java
package javaudpclient;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @web http://java-buddy.blogspot.com/
 */
public class JavaUDPClient {
    
    private static DatagramSocket datagramSocket;
    
    private static final int BUFFER_SIZE = 1024;
    private static byte[] buffer;

    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("usage: java -jar JavaUDPClient.jar <IP address> <port>");
            System.exit(1);
        }
        try {
            InetAddress inetAddress = InetAddress.getByName(args[0]);
            int port = Integer.parseInt(args[1]);
            
            Scanner userScanner = new Scanner(System.in);
            String userInput = userScanner.nextLine();
            
            datagramSocket = new DatagramSocket();
            
            DatagramPacket out_datagramPacket = new DatagramPacket(
                    userInput.getBytes(), 
                    userInput.length(), 
                    inetAddress, 
                    port);
            
            datagramSocket.send(out_datagramPacket);
            
            buffer = new byte[BUFFER_SIZE];
            DatagramPacket in_datagramPacket = 
                    new DatagramPacket(buffer, BUFFER_SIZE);
            datagramSocket.receive(in_datagramPacket);
            
            String serverEcho = new String(
                    in_datagramPacket.getData(), 
                    0, 
                    in_datagramPacket.getLength());
            System.out.println(serverEcho);
            
        } catch (UnknownHostException ex) {
            Logger.getLogger(JavaUDPClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SocketException ex) {
            Logger.getLogger(JavaUDPClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(JavaUDPClient.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            datagramSocket.close();
        }
    }
    
}





Compare with: Simple example of TCP Client/Server communication


No comments:

Post a Comment