Connect to a daytime server using the UDP protocol : UDP « Network Protocol « Java






Connect to a daytime server using the UDP protocol

   


/*
 * Copyright (c) 2004 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose,
 * including teaching and use in open-source projects.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book, 
 * please visit http://www.davidflanagan.com/javaexamples3.
 */
//package je3.nio;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketTimeoutException;

/**
 * Connect to a daytime server using the UDP protocol. We use java.net instead
 * of java.nio because DatagramChannel doesn't honor the setSoTimeout() method
 * on the underlying DatagramSocket
 */
public class DaytimeClient {
  public static void main(String args[]) throws java.io.IOException {
    // Figure out the host and port we're going to talk to
    String host = args[0];
    int port = 13;
    if (args.length > 1)
      port = Integer.parseInt(args[1]);

    // Create a socket to use
    DatagramSocket socket = new DatagramSocket();

    // Specify a 1-second timeout so that receive() does not block forever.
    socket.setSoTimeout(1000);

    // This buffer will hold the response. On overflow, extra bytes are
    // discarded: there is no possibility of a buffer overflow attack here.
    byte[] buffer = new byte[512];
    DatagramPacket packet = new DatagramPacket(buffer, buffer.length, new InetSocketAddress(host,
        port));

    // Try three times before giving up
    for (int i = 0; i < 3; i++) {
      try {
        // Send an empty datagram to the specified host (and port)
        packet.setLength(0); // make the packet empty
        socket.send(packet); // send it out

        // Wait for a response (or timeout after 1 second)
        packet.setLength(buffer.length); // make room for the response
        socket.receive(packet); // wait for the response

        // Decode and print the response
        System.out.print(new String(buffer, 0, packet.getLength(), "US-ASCII"));
        // We were successful so break out of the retry loop
        break;
      } catch (SocketTimeoutException e) {
        // If the receive call timed out, print error and retry
        System.out.println("No response");
      }
    }

    // We're done with the channel now
    socket.close();
  }
}

   
    
    
  








Related examples in the same category

1.Udp Echo Server
2.DatagramSocket Server
3.DatagramSocket Client
4.Send out UDP pockets
5.Receive UDP pocketsReceive UDP pockets
6.Experiment with UDP sockets
7.Using Datagrams to Get the Date
8.An echo server using UDP socketsAn echo server using UDP sockets
9.Handles TCP and UDP connections and provides exception handling and error logging
10.UDP OutputStream
11.UDP InputStream
12.Performs broadcast and multicast peer detection.