01: 
02: //************ Datagram Timeserver uses list of client in a file ********
03: 
04: import java.net.DatagramSocket;
05: import java.net.DatagramPacket;
06: import java.net.InetSocketAddress;
07: import java.util.Date;
08: import java.util.List;
09: import java.util.ArrayList;
10: import java.util.Iterator;
11: import java.io.BufferedReader;
12: import java.io.FileReader;
13: import java.io.IOException;
14: public class TimeServerDG {
15:     public static void main(String[ ] args) {
16:         if (args.length < 1) {
17:             System.err.println("Usage: TimeServerDG <file>");
18:             return;
19:         }
20:         try {
21:             // Read recipient list from file.
22:             List recipients = new ArrayList();
23:             BufferedReader in = 
24:               new BufferedReader(new FileReader(args[0]));
25:             String next = null;
26:             while ((next = in.readLine()) != null)
27:                 recipients.add(next);
28:             in.close();
29:             // Addresses, DatagramSocket, and DatagramPacket
30:             InetSocketAddress[ ] hosts = 
31:                new InetSocketAddress[recipients.size()];
32:             Iterator it = recipients.iterator();
33:             int i = 0;
34:             // Convert string addresses to InetSocketAddresses
35:             while (it.hasNext())
36:               hosts[i++] = 
37:                new InetSocketAddress((String) it.next(), port);
38:             DatagramSocket time_socket = new DatagramSocket();
39: 
40:             // Packet to hold data
41:             byte[ ] t_bytes = new Date().toString().getBytes();
42:             DatagramPacket time_packet = 
43:                new DatagramPacket(t_bytes, t_bytes.length);
44: 
45:             // Send a packet to each recipient every N seconds.
46:             while (true) {
47:                 t_bytes = new Date().toString().getBytes();
48:                 time_packet.setData(t_bytes);             
49:                 for (i = 0; i < hosts.length; i++) {
50:                     time_packet.setSocketAddress(hosts[i]);  
51:                     time_socket.send(time_packet);           
52:                 }
53:                 Thread.sleep(winks);  // pause                       
54:             }
55:         }
56:         catch(IOException e) { System.err.println(e); }
57:         catch(InterruptedException e) { System.err.println(e); }
58:     }
59:     private static final int port = 10001;
60:     private static final int winks = 10000;  // milliseconds 
61: }