FileDocCategorySizeDatePackage
TinyHttpd.javaAPI DocExample1653Wed Jul 23 21:11:20 BST 1997None

TinyHttpd.java

import java.net.*;
import java.io.*;
import java.util.*;

public class TinyHttpd { 
	public static void main( String argv[] ) throws IOException {
		ServerSocket ss = new ServerSocket( Integer.parseInt(argv[0]) );
		System.out.println("starting...");
		while ( true ) {
			new TinyHttpdConnection( ss.accept() ).start();
			System.out.println("new connection");
		}
	}
}

class TinyHttpdConnection extends Thread {
	Socket client;
	TinyHttpdConnection ( Socket client ) throws SocketException {
		this.client = client;
		setPriority( NORM_PRIORITY - 1 );
	}

	public void run() {
		try {
			BufferedReader in = new BufferedReader( 
				new InputStreamReader(client.getInputStream(), "8859_1") );
			OutputStream out = client.getOutputStream();
			PrintWriter pout = new PrintWriter( 
				new OutputStreamWriter(out, "8859_1"), true );
			String request = in.readLine();
			System.out.println( "Request: "+request );

			StringTokenizer st = new StringTokenizer( request );
			if ( (st.countTokens() >= 2) && st.nextToken().equals("GET") ) {
				if ( (request = st.nextToken()).startsWith("/") )
					request = request.substring( 1 );
				if ( request.endsWith("/") || request.equals("") )
					request = request + "index.html";
				try {	
					FileInputStream fis = new FileInputStream ( request );
					byte [] data = new byte [ fis.available() ];
					fis.read( data );
					out.write( data );
					out.flush();
				} catch ( FileNotFoundException e ) {
					pout.println( "404 Object Not Found" ); }
			} else 
				pout.println( "400 Bad Request" );
			client.close();
		} catch ( IOException e ) {
			System.out.println( "I/O error " + e ); }
	}
}