I am writing a simple web server in java as an exercise. When I run the program it immediately starts into an infinite loop outputting "Error: null" into the console. I have a few try/catch statements that do
System.out.println("Error: " + e.getMessage());
I tried using the eclipse debugger to figure out where it starts, but when I run it in the debugger, it acts normally. Heres the two relevant clips of code:
public void run() {
        // Declare server socket
        ServerSocket serversocket = null;
        try {
            // Initialize serversocket on the port passed to
            // the constructor 
            serversocket = new ServerSocket(port);
            System.out.println("Server started on port " 
                    + Integer.toString(port));
        } catch (Exception e) {
            System.out.println("Fatal Error: " + e.getMessage());
        }
        while (true) {
            try {
                // Wait for connections
                Socket connectionsocket = serversocket.accept();
                // Get client IP
                InetAddress client = connectionsocket.getInetAddress();
                System.out.println(client.getHostName() + " connected.");
                // Read the request into a buffer
                BufferedReader input = new BufferedReader(
                    new InputStreamReader(connectionsocket.getInputStream()));
                // Prepare the output stream for sending headers
                // and requested file to the client
                DataOutputStream output = 
                    new DataOutputStream(connectionsocket.getOutputStream());
                http_handler(input, output);
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }
        }
    }
and
private void http_handler(BufferedReader input, DataOutputStream output) {
    int method = 0; // 1 get, 2 head, 0 not supported
    String http = new String();
    String path = new String();
    String file = new String();
    String user_agent = new String();
    try {
        // Two types of requests we can handle:
        // Get /index.html HTTP/1.0
        // HEAD /index.html HTTP/1.0
        String tmp = input.readLine(); // Read from the stream
        String tmp2 = new String(tmp);
        tmp.toUpperCase();
        if (tmp.startsWith("GET")) {
            method = 1;
        }
        if (tmp.startsWith("HEAD")) {
            method = 2;
        }
        if (method == 0) {
            try {
                // If the request is unsupported, send the error
                output.writeBytes(construct_http_header(501, 0));
                output.close();
                return;
            } catch (Exception e2) {
                System.out.println("Error: " + e2.getMessage());
            }
        }
        // Get whats between the spaces in the request
        // without the beginning slash
        int start = 0;
        int end = 0;
        for (int a = 0; a < tmp2.length(); a++) {
            if (tmp2.charAt(a) == ' ' && start != 0) {
                end = a;
                break;
            }
            if (tmp2.charAt(a) == ' ' && start == 0) {
                start = a;
            }
        }
        path = tmp2.substring(start + 2, end);
    } catch(Exception e) {
        System.out.println("Error: " + e.getMessage());
    }
    FileInputStream requestedfile = null;
    try {
        // Try to open the file
        requestedfile = new FileInputStream(path);
    } catch (Exception e) {
        try {
            output.writeBytes(construct_http_header(404, 0));
            output.close();
        } catch (Exception e2) {}
        ;
        System.out.println("Error: " + e.getMessage());
    }
    try {
        int type_is = 0;
        // Find out what the filename ends with so we can
        // put the right MIME type in the header
        if (path.endsWith(".zip") || path.endsWith(".exe")
                || path.endsWith(".tar")) {
            type_is = 3;
        } else if (path.endsWith(".jpg") || path.endsWith(".jpeg")) {
            type_is = 1;
        } else if (path.endsWith(".gif")) {
            type_is = 2;
        } else {
            type_is = 5;
        }
        // write out the header, 200 -> OK
        output.writeBytes(construct_http_header(200, type_is));
        // if the request was HEAD, we don't print the body
        if (method == 1) {
            while (true) {
                // read the file from the filestream and ouput through
                // the client outpustream
                int b = requestedfile.read();
                if (b == -1) {
                    break; // end of file
                }
                output.write(b);
            }
        }
        // Clean up
        output.close();
        requestedfile.close();
    } catch (Exception e) {}
}
** EDIT ** I printed the stack trace, and it is giving a NullPointerException on
Socket connectionsocket = serversocket.accept();
I thought this method was supposed to wait for connections. How do i keep it from doing what it's doing?