A Simple Java UDP Server and UDP Client

For a class I am taking, we are testing out a simple UDP Server and UDP Client to demonstrate what each one does and how sockets work. The code size is very small and give you a good idea about how a UDP Server opens up a port, and then the UDP Client sends or receives data from that port.

To compile these, install Java JDK to your system. Then compile the program with javac UDPClient.java – this will create a UDPClient.class. Execute the file with java UDPClass</strong – leave off the .class, or you will get the error: “Exception in thread “main” java.lang.NoClassDefFoundError”.

Hi there you hard working student! Please consider signing up for Prime Student using the link to the right. You’ll get 6 months of FREE Amazon Prime which means 50% off normal shipping and other cool Amazon perks.

Here is sample code for a simple Java UCP Server and Client, originally from Computer Networking: A Top Down Approach, by Kurose and Ross:

UDPServer.java:

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)
               {
                  DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                  serverSocket.receive(receivePacket);
                  String sentence = new String( receivePacket.getData());
                  System.out.println("RECEIVED: " + sentence);
                  InetAddress IPAddress = receivePacket.getAddress();
                  int port = receivePacket.getPort();
                  String capitalizedSentence = sentence.toUpperCase();
                  sendData = capitalizedSentence.getBytes();
                  DatagramPacket sendPacket =
                  new DatagramPacket(sendData, sendData.length, IPAddress, port);
                  serverSocket.send(sendPacket);
               }
      }
}

UDPClient.java:

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("localhost");
      byte[] sendData = new byte[1024];
      byte[] receiveData = new byte[1024];
      String sentence = inFromUser.readLine();
      sendData = sentence.getBytes();
      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();
   }
}

Last updated February 1, 2017.

44 replies
  1. Me
    Me says:

    > javac UDPClient.java UDPServer.java
    Open two command prompt windows and write in one:
    > java UDPServer
    and after this, write on another:
    > java UDPClient

  2. Me
    Me says:

    > javac UDPClient.java UDPServer.java
    Open two command prompt windows and write in one:
    > java UDPServer
    and after this, write on another:
    > java UDPClient

  3. edgar
    edgar says:

    In the server, you would like to take into account the size of the received package:

    String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());

  4. edgar
    edgar says:

    In the server, you would like to take into account the size of the received package:

    String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());

  5. Nitin Verma
    Nitin Verma says:

    Client is sending the packets to localhost, use the IP Adress or name of the m/c you are running server on.

    InetAddress IPAddress = InetAddress.getByName(“localhost”);

  6. Nitin Verma
    Nitin Verma says:

    Client is sending the packets to localhost, use the IP Adress or name of the m/c you are running server on.

    InetAddress IPAddress = InetAddress.getByName(“localhost”);

  7. Vaibhav
    Vaibhav says:

    THANK U SO MUCH…its so much simple and easy to understand…bcoz of this i completed my project successfully…Secure TFTP with Multithreaded Server my project title…i used some code of this in my project…Again THANK U….

  8. Vaibhav
    Vaibhav says:

    THANK U SO MUCH…its so much simple and easy to understand…bcoz of this i completed my project successfully…Secure TFTP with Multithreaded Server my project title…i used some code of this in my project…Again THANK U….

  9. MYK007
    MYK007 says:

    Hello, I am having a problem with the codes, I have try to run them, but when i enter a sentence, there is no output it just holds on. Can you tell me why?

  10. Dave Drager
    Dave Drager says:

    I think this depends on who you talk to. At scale there might be some differences in how things are handled by the system, but for this small scale project there will be no noticable difference.

  11. RichR
    RichR says:

    This code works really well, on WinXP, and even works on an Insignia Infocast (Chumby). Thanks!

  12. Brusasu
    Brusasu says:

    go into the directory where u save the file,
    launch “javac UDPServer.java” and “javac UDPCliend.java” to compile the source file, when u see .class file then in cmd run “java UDPServer” and into another shell “Java UDPClient”. that’s all.

  13. rviera
    rviera says:

    Yes, just create a UI with an EditText, TextView, and a Button. Then modified the UDPClient code to receive the user input from the EditText. Also change the IP address of the Server. Next, change the output of the message that you received from the Server to print it in the TextView.
    Thanks for the code… 

  14. Sankar
    Sankar says:

    Hello, I am having a problem with the codes, I have try to run them, but when i enter a sentence, there is no output it just holds on. Can you tell me why?

  15. Yash Save
    Yash Save says:

    Hi This code does not work when the 2 computers are on different network. Do we have to use the Trustmanager, or are there any changes needs to be done on the fire wall?

  16. Muhammad Adeel Malik
    Muhammad Adeel Malik says:

    Desktopupd>javac UDPServer.java
    Desktopupd>java UDPServer.java (java UDPServer or java UDPServer.class or  java UDPClass – )
    Error
    Can anyone tell me?
    Exception in thread “main” java.lang.NoClassDefFoundError: UDPServer/javaCaused by: java.lang.ClassNotFoundException: UDPServer.java        at java.net.URLClassLoader$1.run(Unknown Source)        at java.security.AccessController.doPrivileged(Native Method)        at java.net.URLClassLoader.findClass(Unknown Source)        at java.lang.ClassLoader.loadClass(Unknown Source)        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)        at java.lang.ClassLoader.loadClass(Unknown Source)Could not find the main class: UDPServer.java.  Program will exit.

  17. Brusasu
    Brusasu says:

    when you want to run a java before compile, remove .java in the end.
    So after “javac UDPServer.java” run “java UDPServer” and it will run properly.

    bye

Trackbacks & Pingbacks

  1. train_boy says:

    http://tinyurl.com/69ukrl
    A Simple Java UDP Server and UDP Client – systemBash

  2. Dave Drager says:

    New Post: A Simple Java UDP Server and UDP Client http://bit.ly/4AwQjS

  3. Just found the site where Freddy got his Client/Server http://is.gd/6VLfk #DurhamCS

  4. […] up on my previous post, we also had to demonstrate a sample Java TCP Server and TCP Client. They are pretty small and give […]

  5. Dave Drager says:

    New blog post: A Simple Java UDP Server and UDP Client http://tinyurl.com/69ukrl

Comments are closed.