KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > mcast > server > UDPServer


1 package org.sapia.ubik.mcast.server;
2
3 import java.io.EOFException JavaDoc;
4 import java.io.IOException JavaDoc;
5 import java.io.InterruptedIOException JavaDoc;
6
7 import java.net.DatagramPacket JavaDoc;
8 import java.net.DatagramSocket JavaDoc;
9 import java.net.SocketException JavaDoc;
10
11
12 /**
13  * @author Yanick Duchesne
14  * <dl>
15  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2003 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
16  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
17  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
18  * </dl>
19  */

20 public abstract class UDPServer extends Thread JavaDoc {
21   static final int DEFAULT_BUFSZ = 1000;
22   protected DatagramSocket JavaDoc _sock;
23   private int _bufsize = DEFAULT_BUFSZ;
24
25   /**
26    * Constructor for UDPServer.
27    */

28   public UDPServer(String JavaDoc name, int soTimeout) throws java.net.SocketException JavaDoc {
29     super(name);
30     super.setDaemon(true);
31     _sock = new DatagramSocket JavaDoc();
32     _sock.setSoTimeout(soTimeout);
33   }
34
35   public UDPServer(String JavaDoc name, int soTimeout, int port)
36     throws java.net.SocketException JavaDoc {
37     super(name);
38     _sock = new DatagramSocket JavaDoc(port);
39     _sock.setSoTimeout(soTimeout);
40   }
41
42   public void setBufsize(int size) {
43     _bufsize = size;
44   }
45
46   public int getPort() {
47     return _sock.getLocalPort();
48   }
49
50   public void run() {
51     DatagramPacket JavaDoc pack = null;
52
53     while (true) {
54       try {
55         pack = new DatagramPacket JavaDoc(new byte[_bufsize], _bufsize);
56         _sock.receive(pack);
57         handle(pack, _sock);
58       } catch (InterruptedIOException JavaDoc e) {
59         handleSoTimeout();
60       } catch (SocketException JavaDoc e) {
61         if (_sock.isClosed()) {
62           break;
63         }
64       } catch (EOFException JavaDoc e) {
65         handlePacketSizeToShort(pack);
66       } catch (IOException JavaDoc e) {
67         e.printStackTrace();
68       }
69     }
70   }
71
72   protected int bufSize() {
73     return _bufsize;
74   }
75
76   protected abstract void handleSoTimeout();
77
78   protected abstract void handlePacketSizeToShort(DatagramPacket JavaDoc pack);
79
80   protected abstract void handle(DatagramPacket JavaDoc pack, DatagramSocket JavaDoc sock);
81 }
82
Popular Tags