Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need to send a UDP packet and receive a response in Java

I have to send a UDP packet and get a response back from UDP server. I though UDP was analogous with a java.net.DatagramPacket in Java, but the documentation for DatagramPacket seems to be that you send a packet but don't get anything back, is this the right thing to use or should I be using java.net.Socket

like image 246
Paul Taylor Avatar asked Dec 19 '11 14:12

Paul Taylor


4 Answers

Example of UDP datagram sending and receiving (source):

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();
   }
}
like image 107
bezmax Avatar answered Oct 11 '22 13:10

bezmax


You have to use a DatagramPacket and a DatagramSocket. When you send a packet you just send a packet. However when you receive a packet you can get a packet which was sent from another program (e.g. the servers reply)

http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html

Socket is only for TCP connections.

like image 42
Peter Lawrey Avatar answered Oct 11 '22 14:10

Peter Lawrey


The Java documentation does cover how to write a client and a server.

http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html

You want to look at DatagramSocket#receive

like image 45
ptomli Avatar answered Oct 11 '22 13:10

ptomli


That's precisely the distinction between UDP and TCP sockets.

UDP is broadcast, whereas TCP with java.net.Socket is point to point. UDP is fire-and-forget, analogous to publishing a message on a JMS Topic.

See: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html

like image 30
wrschneider Avatar answered Oct 11 '22 12:10

wrschneider