Package util.io

Source Code of util.io.NetworkUtilities

/*
* TV-Browser
* Copyright (C) 04-2003 Martin Oberhauser (martin@tvbrowser.org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* CVS information:
*     $Date: 2010-04-13 09:06:52 +0200 (Tue, 13 Apr 2010) $
*   $Author: bananeweizen $
* $Revision: 6594 $
*/
package util.io;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.URL;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.logging.Logger;


/**
* Network Helper Class with some utility functions
*
* @author bodum
* @since 2.2
*/
public class NetworkUtilities {

  private static final Logger mLog = java.util.logging.Logger
    .getLogger(NetworkUtilities.class.getName());

  /**
   * Checks if a Internet connection can be established
   *
   * @return true, if a connection can be established
   */
  public static boolean checkConnection() {
    return new CheckNetworkConnection().checkConnection();
  }

  /**
   * Checks if a Internet connection to a specific Server can be established
   *
   * @param url check this Server
   * @return true, if a connection can be established
   */
  public static boolean checkConnection(URL url) {
    return new CheckNetworkConnection().checkConnection(url);
  }


  /**
   * get the time difference from a NTP server
   *
   * @param serverName
   * @return time difference in seconds
   * @since 2.6
   */
  public static int getTimeDifferenceSeconds(String serverName) {
    // don't access the net if there is no connection
    if (!checkConnection()) {
      return 0;
    }
    // Send request
    try {
      DatagramSocket socket = new DatagramSocket();
      socket.setSoTimeout(10000);
      InetAddress address = InetAddress.getByName(serverName);
      byte[] buf = new NtpMessage().toByteArray();
      DatagramPacket packet =
        new DatagramPacket(buf, buf.length, address, 123);

      // Set the transmit timestamp *just* before sending the packet
      // ToDo: Does this actually improve performance or not?
      NtpMessage.encodeTimestamp(packet.getData(), 40,
        (System.currentTimeMillis()/1000.0) + 2208988800.0);

      socket.send(packet);


      // Get response
      mLog.info("NTP request sent, waiting for response...");
      packet = new DatagramPacket(buf, buf.length);
      socket.receive(packet);

      // Immediately record the incoming timestamp
      double destinationTimestamp =
        (System.currentTimeMillis()/1000.0) + 2208988800.0;


      // Process response
      NtpMessage msg = new NtpMessage(packet.getData());

      // Corrected, according to RFC2030 errata
      double roundTripDelay = (destinationTimestamp-msg.originateTimestamp) -
        (msg.transmitTimestamp-msg.receiveTimestamp);

      double localClockOffset =
        ((msg.receiveTimestamp - msg.originateTimestamp) +
        (msg.transmitTimestamp - destinationTimestamp)) / 2;


      // Display response
      mLog.info("NTP server: " + serverName);
      mLog.info(msg.toString());

      mLog.info("Dest. timestamp:     " +
        NtpMessage.timestampToString(destinationTimestamp));

      mLog.info("Round-trip delay: " +
        new DecimalFormat("0.00").format(roundTripDelay*1000) + " ms");

      mLog.info("Local clock offset: " +
        new DecimalFormat("0.00").format(localClockOffset*1000) + " ms");

      socket.close();
      return (int) localClockOffset;
    } catch (SocketException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return 0;
  }

  public static String[] getConnectionCheckUrls() {
    return CheckNetworkConnection.getUrls();
  }

}
TOP

Related Classes of util.io.NetworkUtilities

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.