next up previous contents
Next: About this document Up: Samples / No Previous: Thread

net

wserver.java

  1: /*
  2:  * wserver.java  0.1  96/08/01
  3:  *
  4:  * Copyright (c) 1996  MARUYAMA Fujio  All Rights Reserved.
  5:  *
  6:  * Permission to use, copy, modify, and distribute this software
  7:  * and its documentation for NON-COMMERCIAL purposes and without
  8:  * fee is hereby granted provided that this copyright notice
  9:  * appears in all copies. 
 10:  *
 11:  *           Mail : maruyama@wakhok.ac.jp
 12:  *
 13:  */
 14: 
 15: import java.net.*;
 16: import java.io.*;
 17: import java.util.*;
 18: 
 19: class wserver {
 20: 
 21: //String docroot = "/usr/backhome/maruyama/www";
 22:   String docroot = "/usr/www/mosaic/httpd/docs";
 23: 
 24:   String Reply    =  "HTTP/1.0 200 Document follows";
 25:   String Mime     =  "MIME-Version: 1.0";
 26:   String Server   =  "Server: Jarver/0.1";
 27:   String Date     =  "Date: ";
 28:   String Type     =  "Content-Type: ";
 29:   String Length   =  "Content-Length: ";
 30:   String Modified =  "Last-Modified: ";
 31: 
 32:   public String getContentType(String filename){
 33:       String ext = filename.substring(filename.lastIndexOf('.'));
 34:       // System.out.println(filename);
 35:       if ( ext.equals(".html"))  return "text/html" ;
 36:       if ( ext.equals(".htm") )  return "text/html" ;
 37:       if ( ext.equals(".xbm") )  return "image/x-xbitmap" ;
 38:       if ( ext.equals(".gif") )  return "image/gif" ;
 39:       if ( ext.equals(".jpeg"))  return "image/jpeg" ;
 40:       if ( ext.equals(".jpg") )  return "image/jpeg" ;
 41:       if ( ext.equals(".au")  )  return "audio/basic" ;
 42:       return "www/unknown" ;
 43:    }
 44: 
 45:   public void printString(String string,OutputStream os){
 46:    try{
 47:       for( int i=0; i< string.length() ; i++){
 48:        os.write(string.charAt(i));
 49:       }
 50:       os.write('n');
 51:       // System.out.println(string);
 52:     } catch(Exception e){
 53:       System.out.println("Exception : " + e );
 54:     }
 55:   }
 56: 
 57:   public void Header(String path,OutputStream os){
 58:    try{
 59:      File file       =  new File(path);
 60:      String date     =  Date     +  new Date(System.currentTimeMillis()) ;
 61:      String type     =  Type     +  getContentType(path);
 62:      String length   =  Length   +  file.length();
 63:      String modified =  Modified +  new Date(file.lastModified()) ;
 64:  
 65:      printString(Reply,os);
 66:      printString(Mime,os);
 67:      printString(Server,os);
 68:      printString(date,os);
 69:      printString(type,os);
 70:      printString(length,os);
 71:      printString(modified,os);
 72:      os.write('n');
 73: 
 74:     } catch(Exception e){
 75:       System.out.println("Exception : " + e );
 76:     }
 77:   }
 78: 
 79:   wserver() {
 80:      ServerSocket serverSocket = null;
 81:      try {
 82:             serverSocket = new ServerSocket(8080);
 83:         } catch (Exception e) {
 84:             System.out.println("Exception : " + e);
 85:             System.exit(1);
 86:         }
 87: 
 88:      try {
 89:      while( true){
 90:         Socket clientSocket = serverSocket.accept();
 91:         DataInputStream is = new DataInputStream(
 92:         new BufferedInputStream(clientSocket.getInputStream()));
 93:         OutputStream os = clientSocket.getOutputStream();
 94:         String inputLine, outputLine;
 95:         String path=null;
 96: 
 97:         while ((inputLine = is.readLine()) != null) {
 98:           if ( inputLine.startsWith("GET") ){
 99:                int first  = inputLine.indexOf(' ');
100:                int second = inputLine.indexOf(' ',first+1);
101:                path = docroot+inputLine.substring(first+1,second);
102:                continue ;
103:            } 
104:            if ( inputLine.equals("") ){
105:                Header(path,os);
106:                BufferedInputStream fin = new BufferedInputStream(
107:                       new FileInputStream(path),1024);
108:                int ch ;
109:                while(( ch  = fin.read()) != -1 ){
110:                   os.write(ch);
111:                }
112:                break ;
113:            } 
114:        } 
115:        os.close();
116:        is.close();
117:        clientSocket.close();
118:      }
119:    } catch (IOException e) {
120:        e.printStackTrace();
121:    }
122:  }
123: 
124:  public static void main(String args[]) {
125:        new wserver();
126:  }
127: 
128: }

sender.java

  1: /*
  2:  * sender.java  0.1  96/08/01
  3:  *
  4:  * Copyright (c) 1996  MARUYAMA Fujio  All Rights Reserved.
  5:  *
  6:  * Permission to use, copy, modify, and distribute this software
  7:  * and its documentation for NON-COMMERCIAL purposes and without
  8:  * fee is hereby granted provided that this copyright notice
  9:  * appears in all copies. 
 10:  *
 11:  *           Mail : maruyama@wakhok.ac.jp
 12:  *
 13:  */
 14: 
 15: import java.io.*;
 16: import java.net.*;
 17: import java.util.*;
 18: 
 19: class Sender {
 20:     private int port ;
 21:     private InetAddress address = null ;
 22:     private byte buf[] = new byte[256];
 23:     private DatagramSocket socket = null;
 24:     private DatagramPacket packet;
 25: 
 26:     Sender( String host, int port0 ){
 27: 
 28:         DataInputStream stdin = new DataInputStream(System.in);
 29:         String localhost = null ;
 30:         boolean loop = true ;
 31: 
 32:         try {
 33:             address = InetAddress.getByName(host);
 34:             port = port0;
 35:             socket = new DatagramSocket();
 36:             localhost = InetAddress.getLocalHost().getHostName();
 37:         } catch (java.net.SocketException e) {
 38:             System.err.println("Could not create datagram socket.");
 39:         } catch (Exception e) {
 40:             System.err.println("Exception: " + e);
 41:         }
 42: 
 43:         sendString("Start19960801 "+System.getProperty("user.name")+"@"+localhost);
 44:         try {
 45:            while( loop ){
 46:              System.out.print("> "); System.out.flush();
 47:              String line = stdin.readLine();
 48:              if ( line.equals("Quit.") ) loop=false ;
 49:              sendString(line);
 50:            }
 51:             socket.close();
 52:         } catch (IOException e) {
 53:             System.err.println("IOException:  " + e);
 54:             e.printStackTrace();
 55:         }
 56:     }
 57: 
 58:     Sender(String host){
 59:         this(host, 1996);
 60:     }
 61: 
 62:     public void sendString(String str){
 63:      try{
 64:        str.getBytes(0,str.length(),buf,0);
 65:        packet = new DatagramPacket(buf, str.length(), address, port);
 66:        socket.send(packet);
 67:      } catch (IOException e) {
 68:          System.err.println("IOException:  " + e);
 69:          e.printStackTrace();
 70:      }
 71:     }
 72: 
 73:     public static void main(String[] args) {
 74:         if (args.length != 1) {
 75:              System.out.println("Usage: java Sender <hostname> ");
 76:              return;
 77:         }
 78:         new Sender(args[0]);
 79:     }
 80: 
 81: }
 82:

receiver.java

  1: /*
  2:  * receiver.java  0.1  96/08/01
  3:  *
  4:  * Copyright (c) 1996  MARUYAMA Fujio  All Rights Reserved.
  5:  *
  6:  * Permission to use, copy, modify, and distribute this software
  7:  * and its documentation for NON-COMMERCIAL purposes and without
  8:  * fee is hereby granted provided that this copyright notice
  9:  * appears in all copies. 
 10:  *
 11:  *           Mail : maruyama@wakhok.ac.jp
 12:  *
 13:  */
 14: 
 15: import java.io.*;
 16: import java.net.*;
 17: import java.util.*;
 18: 
 19: class Receiver extends Thread {
 20:     private DatagramSocket socket = null;
 21:     private DataInputStream qfs = null;
 22: 
 23:     Receiver() {
 24:         super("Receiver");
 25:         try {
 26:             socket = new DatagramSocket(1997);
 27:             System.out.println("Receiver listening on port: " + socket.getLocalPort());
 28:         } catch (java.net.SocketException e) {
 29:              System.err.println("Could not create datagram socket.");
 30:         }
 31:     }
 32: 
 33:     public void run() {
 34:         if (socket == null)
 35:             return;
 36: 
 37:         System.out.println("Receiver begin " );
 38:         while (true) {
 39:             try {
 40:                 byte[] buf = new byte[256];
 41: 
 42:                 DatagramPacket packet = new DatagramPacket(buf, 256);
 43:                 socket.receive(packet);
 44:                 String dString = new String(packet.getData(),0);
 45:                 System.out.println(dString);
 46: 
 47:             } catch (IOException e) {
 48:                 System.err.println("IOException:  " + e);
 49:                 e.printStackTrace();
 50:             }
 51:         }
 52:     }
 53: 
 54:     protected void finalize() {
 55:         if (socket != null) {
 56:             socket.close();
 57:             socket = null;
 58:             System.out.println("Closing datagram socket.");
 59:         }
 60:     }
 61: 
 62:     public static void main(String arg[]){
 63:          new Receiver().start();
 64:     }
 65: }
 66: 
 67:

chatServer.java

  1: /*
  2:  * chatServer.java  0.1  96/08/01
  3:  *
  4:  * Copyright (c) 1996  MARUYAMA Fujio  All Rights Reserved.
  5:  *
  6:  * Permission to use, copy, modify, and distribute this software
  7:  * and its documentation for NON-COMMERCIAL purposes and without
  8:  * fee is hereby granted provided that this copyright notice
  9:  * appears in all copies. 
 10:  *
 11:  *           Mail : maruyama@wakhok.ac.jp
 12:  *
 13:  */
 14: 
 15: import java.io.*;
 16: import java.net.*;
 17: import java.util.*;
 18: 
 19: class chatServer extends Thread {
 20:     private DatagramSocket socket = null;
 21:     private DatagramSocket send_socket = null;
 22:     Hashtable h = new Hashtable();
 23: 
 24:     chatServer() {
 25:         super("chatServer");
 26:         try {
 27:             socket = new DatagramSocket(1996);
 28:             send_socket = new DatagramSocket();
 29:         } catch (java.net.SocketException e) {
 30:              System.err.println("Could not create datagram socket.");
 31:         }
 32:     }
 33: 
 34:     public void run() {
 35:         if (socket == null)
 36:             return;
 37: 
 38:         System.out.println("chatServer begin .... " );
 39:         while (true) {
 40:             try {
 41:                 byte buf[] = new byte[256];
 42:                 DatagramPacket packet;
 43:                 InetAddress address;
 44:                 int port;
 45:                 int length;
 46:                 String host = null;
 47:                 String dString = null;
 48:                 String header = "";
 49:                 int i,j ;
 50: 
 51:                 packet = new DatagramPacket(buf, 256);
 52:                 socket.receive(packet);
 53: 
 54:                 address = packet.getAddress();
 55:                 host=address.getHostName() ;
 56:                 length = packet.getLength();
 57:                 port = packet.getPort();
 58: 
 59:                 dString = new String(buf,0).substring(0,length);
 60:                 if ( dString.startsWith("Start19960801 ") ){
 61:                      i = dString.indexOf(' ');
 62:                      h.put(address , dString.substring(i+1));
 63:                      continue;
 64:                 }
 65:                 if ( dString.equals("Quit.") ){
 66:                     h.remove(address);
 67:                     continue;
 68:                 }
 69:                 
 70:                 if ( ( header=(String)h.get(address) ) == null )
 71:                             header="Unknown Host";
 72:                 header = "[" + header + "] "; 
 73:                 dString = header + dString ; 
 74: 
 75:                 // System.out.println(dString);
 76:                 length=dString.length();
 77:                 dString.getBytes(0, length, buf, 0);
 78:                 for( Enumeration e=h.keys(); e.hasMoreElements(); ){ 
 79:                    address= (InetAddress)e.nextElement() ;
 80:                    packet = new DatagramPacket(buf, length, address, 1997);
 81:                    send_socket.send(packet);
 82:                 }
 83:             } catch (IOException e) {
 84:                 System.err.println("IOException:  " + e);
 85:                 e.printStackTrace();
 86:             }
 87:         }
 88:     }
 89: 
 90:     protected void finalize() {
 91:         if (socket != null) {
 92:             socket.close();
 93:             socket = null;
 94:             System.out.println("Closing datagram socket.");
 95:         }
 96:     }
 97: 
 98:     public static void main(String arg[]){
 99:          new chatServer().start();
100:     }
101: }

simpleLoader.java

  1: /*
  2:  * simpleLoader.java  0.1  96/08/01
  3:  *
  4:  * Copyright (c) 1996  MARUYAMA Fujio  All Rights Reserved.
  5:  *
  6:  * Permission to use, copy, modify, and distribute this software
  7:  * and its documentation for NON-COMMERCIAL purposes and without
  8:  * fee is hereby granted provided that this copyright notice
  9:  * appears in all copies. 
 10:  *
 11:  *           Mail : maruyama@wakhok.ac.jp
 12:  *
 13:  */
 14: 
 15: import java.util.*;
 16: import java.io.*;
 17: import java.net.*;
 18: 
 19: class simpleLoader extends ClassLoader {
 20:     String base = null ;
 21:     URL    url  = null ;
 22:    
 23:     simpleLoader(String str){
 24:         base = str ; 
 25:     }
 26: 
 27:     private Class loadNetClass( String name ) throws IOException {
 28: 	InputStream in = null;
 29:         ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
 30: 	try {
 31:                 url = new URL( base + "/" + name + ".class");
 32: 		URLConnection c = url.openConnection();
 33: 		in = c.getInputStream();
 34: 
 35: 		byte buff[] = new byte[1024];
 36: 		int  n,m;
 37: 		
 38:                 int len=0;
 39: 		while ((n = in.read(buff, 0 , 1024)) >= 0) {
 40:                       out.write(buff,0,n);
 41:                       len += n ;
 42: 		}
 43:                 System.out.println("Length: "+len);
 44: 
 45: 		byte data[] = new byte[len];
 46:                 data=out.toByteArray();
 47: 		return defineClass(data, 0, len);
 48: 
 49: 	} catch (IOException e) {
 50: 	    e.printStackTrace();
 51: 	    throw e;
 52: 	} catch (Throwable e) {
 53: 	    e.printStackTrace();
 54: 	    throw new IOException("class not loaded: " + url);
 55: 	}
 56:     }
 57: 
 58:     public Class loadClass(String name) throws ClassNotFoundException {
 59: 	return loadClass(name, true);
 60:     }
 61: 
 62:     protected Class loadClass(String name, boolean resolve) 
 63:                                        throws ClassNotFoundException {
 64:         Class cl = null ;
 65: 	try {
 66:   	    return findSystemClass(name);
 67: 	} catch (Throwable e) {}
 68:         try {
 69: 	    loadNetClass(name);
 70: 	    if (resolve) {
 71: 	        resolveClass(cl);
 72:             }
 73:     	} catch( Exception e){
 74:             System.out.println(e);
 75:         }
 76:     	return cl;
 77:     }
 78: 
 79: }

loadTest.java

  1: /*
  2:  * loadTest.java  0.1  96/08/01
  3:  *
  4:  * Copyright (c) 1996  MARUYAMA Fujio  All Rights Reserved.
  5:  *
  6:  * Permission to use, copy, modify, and distribute this software
  7:  * and its documentation for NON-COMMERCIAL purposes and without
  8:  * fee is hereby granted provided that this copyright notice
  9:  * appears in all copies. 
 10:  *
 11:  *           Mail : maruyama@wakhok.ac.jp
 12:  *
 13:  */
 14: 
 15: import java.net.*;
 16: 
 17: class loadTest {
 18: public static void main(String args[]){
 19:   Class sc = null ;
 20:   Object sample = null;
 21:   try {
 22: 
 23:      //String base="http://ews1:8080";
 24:      String base="http://www.wakhok.ac.jp/~maruyama";
 25: 
 26:      simpleLoader loader = new simpleLoader(base);
 27:      sc = loader.loadClass(args[0]);
 28:  
 29:      sample = sc.newInstance();
 30: 
 31:   } catch ( Exception e){
 32:      e.printStackTrace();
 33:      System.out.println("Instance: " + e ) ;
 34:   } 
 35:  }
 36: }


maruyama@wakhok.ac.jp