A Client Socket in Java

This section shows a simple example of using a socket to communicate with another computer. You should type this code in and try it. If you haven't done much network programming, you'll find it a gleeful experience as you network with systems around the planet, and even in space. The space shuttle has a TCP/IP network connection to Mission Control, but the spoilsports at NASA keep its address secret, so we'll use a different host.

There is an Internet protocol known as Network Time Protocol or NTP. NTP is used to synchronize the clocks of some computers. Without periodic sync'ing, computer clocks tend to drift out of alignment, causing problems for times they need to agree on, like email and file timestamps. NTP is pretty fancy these days, but a simple part of the protocol involves making a socket connection to a NTP server to get the time.

Our example program will open a socket connection to an NTP server and print out the time it gets back. The way a client asks for the time is simply to make a socket connection to port 13 on an NTP server. Port 13 is the Internet standard on all computers for the time of day port. You don't have to identify yourself or write some data indicating what you want. Just making the socket connection is enough to get the server to give you an answer. Java does all the work of assembling the bytes into packets, sending them, and giving you an input stream with the bytes coming back from the server.

Here is a Java program that connects to an NTP server and asks the time:

import java.io.*;
import java.net.*;
public class AskTime {

    public static void main(String a[]) throws Exception {
        if (a.length!=1) {
            System.out.println("usage:  java AskTime <systemname> ");
            System.exit(0);
        }

        String machine = a[0];
        final int daytimeport = 13;
        Socket so = new Socket(machine, daytimeport);
        BufferedReader br =
               new BufferedReader( new InputStreamReader( 
                         so.getInputStream() ) );
        String time = br.readLine();
        System.out.printf("%s says it is %s %n", machine, time);
    }
}

The program expects the name of an NTP server to be passed to it on the command line. There are about 200,000 NTP servers on the Internet. Several national standards organizations allow reading the time via NTP. Table 25-2 gives a couple of addresses for the service.

Table 25-2. Some global timeservers

Organization

NTP server

IP address

Physikalisch-Technischen Bundesanstalt, Germany

ptbtime1.ptb.de

192.53.103.103

US Naval Observatory, Washington, DC

tock.usno.navy.mil

192.5.41.41

These servers come and go. Do a web search on “NTP server” for a current list. When you run the program, giving a hostname as argument, you see this:

% java AskTime ptbtime1.ptb.de
ptbtime1.ptb.de says it is 02 MAY 2004 01:43:56 METDST 

You can provide the IP address instead of the server name, and the AskTime program will work equally well.

This program demonstrates how easy it is to open a socket connection to a port on another computer using the Java networking library. It's just flat-out impressive to write a dozen lines of code that can ask a computer anywhere on the planet to tell you the time. Maybe there's something to this Internet thing, after all.

Sockets are used in client or in server mode. The program shown previously is an example of the client use of socket. The client side initiates the contact. It is like knocking on a door or calling a phone number and starting a conversation with whoever answers.

The server side is just sitting there, waiting on a socket until someone shows up to ask for something. We will show how to write a server socket a little later in the chapter, in A Server Socket in Java on page 660. The next topic, Sending Email by Java, is another example of how a client can obtain a service by opening a socket connection and writing to it. The example here is sending email by writing to the mailserver port which (as another Internet standard) lives on port 25.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.118.141.27