1 package org.sapia.ubik.net.udp; 2 3 import org.sapia.ubik.net.Request; 4 5 import java.net.DatagramPacket ; 6 import java.net.DatagramSocket ; 7 8 9 13 public class UDPServer implements Runnable { 14 protected static final int DEFAULT_BUFSZ = 1000; 15 protected static final int DEFAULT_TIMEOUT = 30000; 16 protected DatagramSocket _server; 17 private int _bufsize = DEFAULT_BUFSZ; 18 private UDPConnectionFactory _fac; 19 20 23 public UDPServer(DatagramSocket 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 pack = new DatagramPacket (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 t) { 39 if (handleError(t)) { 40 close(); 41 42 break; 43 } 44 } 45 } 46 } 47 48 protected void handleRequest(Request req, Object data) { 49 try { 50 System.out.println("received " + data); 51 req.getConnection().send("BAR"); 52 } catch (Throwable 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 t) { 64 t.printStackTrace(); 65 66 return true; 67 } 68 69 public static void main(String [] args) { 70 try { 71 System.out.println("Starting server..."); 72 73 UDPServer server = new UDPServer(new DatagramSocket (6666)); 74 Thread t = new Thread (server); 75 t.start(); 76 } catch (Exception e) { 77 e.printStackTrace(); 78 } 79 } 80 } 81 | Popular Tags |