KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > net > udp > UDPServer


1 package org.sapia.ubik.net.udp;
2
3 import org.sapia.ubik.net.Request;
4
5 import java.net.DatagramPacket JavaDoc;
6 import java.net.DatagramSocket JavaDoc;
7
8
9 /**
10  * @author Yanick Duchesne
11  * 16-Jun-2003
12  */

13 public class UDPServer implements Runnable JavaDoc {
14   protected static final int DEFAULT_BUFSZ = 1000;
15   protected static final int DEFAULT_TIMEOUT = 30000;
16   protected DatagramSocket JavaDoc _server;
17   private int _bufsize = DEFAULT_BUFSZ;
18   private UDPConnectionFactory _fac;
19
20   /**
21    * Constructor for UDPServer.
22    */

23   public UDPServer(DatagramSocket JavaDoc server) {
24     _server = server;
25     _fac = new UDPConnectionFactory(DEFAULT_BUFSZ, DEFAULT_TIMEOUT);
26   }
27
28   public void run() {
29     while (true) {
30       try {
31         DatagramPacket JavaDoc pack = new DatagramPacket JavaDoc(new byte[_bufsize], _bufsize);
32         UDPConnection conn = null;
33         _server.receive(pack);
34         conn = _fac.newConnection(_server, pack);
35         handleRequest(new Request(conn,
36             new UDPServerAddress(_server.getLocalAddress(),
37               _server.getLocalPort())), Util.fromDatagram(pack));
38       } catch (Throwable JavaDoc t) {
39         if (handleError(t)) {
40           close();
41
42           break;
43         }
44       }
45     }
46   }
47
48   protected void handleRequest(Request req, Object JavaDoc data) {
49     try {
50       System.out.println("received " + data);
51       req.getConnection().send("BAR");
52     } catch (Throwable JavaDoc t) {
53       t.printStackTrace();
54     }
55   }
56
57   public void close() {
58     if (_server != null) {
59       _server.close();
60     }
61   }
62
63   protected boolean handleError(Throwable JavaDoc t) {
64     t.printStackTrace();
65
66     return true;
67   }
68
69   public static void main(String JavaDoc[] args) {
70     try {
71       System.out.println("Starting server...");
72
73       UDPServer server = new UDPServer(new DatagramSocket JavaDoc(6666));
74       Thread JavaDoc t = new Thread JavaDoc(server);
75       t.start();
76     } catch (Exception JavaDoc e) {
77       e.printStackTrace();
78     }
79   }
80 }
81
Popular Tags