Mega Code Archive

 
Categories / Java / Network Protocol
 

Quote Server

/* From http://java.sun.com/docs/books/tutorial/index.html */ /*  * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions are met:  *  * -Redistribution of source code must retain the above copyright notice, this  *  list of conditions and the following disclaimer.  *  * -Redistribution in binary form must reproduce the above copyright notice,  *  this list of conditions and the following disclaimer in the documentation  *  and/or other materials provided with the distribution.  *  * Neither the name of Sun Microsystems, Inc. or the names of contributors may  * be used to endorse or promote products derived from this software without  * specific prior written permission.  *  * This software is provided "AS IS," without a warranty of any kind. ALL  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING  * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE  * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")  * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE  * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS  * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST  * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,  * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY  * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  *  * You acknowledge that this software is not designed, licensed or intended  * for use in the design, construction, operation or maintenance of any  * nuclear facility.  */ import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Date; public class QuoteServer {   public static void main(String[] args) throws IOException {     new QuoteServerThread().start();   } } class QuoteServerThread extends Thread {   private DatagramSocket socket = null;   private DataInputStream in = null;   private boolean moreQuotes = true;   public QuoteServerThread() throws IOException {     super("QuoteServerThread");     socket = new DatagramSocket(4445);     try {       in = new DataInputStream(new FileInputStream("one-liners.txt"));     } catch (FileNotFoundException e) {       System.err           .println("Could not open quote file. Serving time instead.");     }   }   public void run() {     while (moreQuotes) {       try {         byte[] buf = new byte[256];         // receive request         DatagramPacket packet = new DatagramPacket(buf, buf.length);         socket.receive(packet);         // figure out response         String dString = null;         if (in == null)           dString = new Date().toString();         else           dString = getNextQuote();         dString.getBytes(0, dString.length(), buf, 0);         // send the response to the client at "address" and "port"         InetAddress address = packet.getAddress();         int port = packet.getPort();         packet = new DatagramPacket(buf, buf.length, address, port);         socket.send(packet);       } catch (IOException e) {         e.printStackTrace();         moreQuotes = false;       }     }     socket.close();   }   private String getNextQuote() {     String returnValue = null;     try {       if ((returnValue = in.readLine()) == null) {         in.close();         moreQuotes = false;         returnValue = "No more quotes. Goodbye.";       }     } catch (IOException e) {       returnValue = "IOException occurred in server.";     }     return returnValue;   } } ///////////////////////////////////////////////// import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class QuoteClient {   public static void main(String[] args) throws IOException {     if (args.length != 1) {       System.out.println("Usage: java QuoteClient <hostname>");       return;     }     // get a datagram socket     DatagramSocket socket = new DatagramSocket();     // send request     byte[] buf = new byte[256];     InetAddress address = InetAddress.getByName(args[0]);     DatagramPacket packet = new DatagramPacket(buf, buf.length, address,         4445);     socket.send(packet);     // get response     packet = new DatagramPacket(buf, buf.length);     socket.receive(packet);     // display response     String received = new String(packet.getData());     System.out.println("Quote of the Moment: " + received);     socket.close();   } } /////////////////////////////////////////////////