日期:2014-05-20  浏览次数:20792 次

一个简单的HTTP服务器问题
Java code

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

public class Server {
    public static void main(String[] args) throws Exception {

        String requestMessageLine;
        String fileName;
        ServerSocket listenSocket = new ServerSocket(8000);
        Socket connectSocket = listenSocket.accept();

        BufferedReader inFormClient = new BufferedReader(new InputStreamReader(
                connectSocket.getInputStream()));
        DataOutputStream outToClient = new DataOutputStream(connectSocket.getOutputStream());
        requestMessageLine = inFormClient.readLine();

        StringTokenizer tokenizedLine = new StringTokenizer(requestMessageLine);
        InputStream is = connectSocket.getInputStream();
        OutputStream os = connectSocket.getOutputStream();
        PrintWriter pw = new PrintWriter(os);
        
        while (true) {

            if (tokenizedLine.nextToken().equals("GET")) {

                fileName = tokenizedLine.nextToken();
                if (fileName.startsWith("/") == true) {
                    fileName = fileName.substring(1);
                }
                String filePath = new String("C:\\www\\");
                File file = new File(filePath + fileName);
                int numOfBytes = (int) file.length();
                try {
                    FileInputStream inFile = new FileInputStream(filePath
                            + fileName);

                    byte[] fileInBytes = new byte[numOfBytes];
                    inFile.read(fileInBytes);
                    outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n");

                    if (fileName.endsWith(".jpg")) {
                        outToClient.writeBytes("Conten-Type: image/jpeg\r\n");
                    } else if (fileName.endsWith(".gif")) {
                        outToClient.writeBytes("Conten-Type: image/gif\r\n");
                    } else if (fileName.endsWith(".html")
                            || fileName.endsWith(".htm")) {

                        outToClient.writeBytes("Conten-Type: text/html\r\n");
                        // System.out.println(outToClient.toString());
                    }
                    outToClient.writeBytes("Content-Length: " + numOfBytes
                            + "\r\n");
                    outToClient.writeBytes("\r\n");
                    outToClient.write(fileInBytes, 0, numOfBytes);
                    connectSocket.close();

                } catch (FileNotFoundException e) {

                    outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n");
                    pw.print("ContentType: text/html\r\n");
                    pw.print("\r\n");
                    pw.print("<body>");
                    pw.println("Your request: " + fileName + " is not found!");
                    pw.print("</body>");
                    pw.close();
                    is.close();

                } catch (NoSuchElementException ee) {
                    outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n");
                    pw.print("ContentType: text/html\r\n");
                    pw.print("\r\n");
                    pw.print("<body>");
                    pw.println("No support for other request except GET!");
                    pw.print("</body>");
                    pw.close();
                    is.close();

                }
            }

        }

    }
}



现在的问题是可以通过浏览器请求一个C:\www\路径下的文件,比如txt、jpg等,但是当请求的是html时,网页中的图片无法显示,有谁能帮下忙!!
不胜感激!!!

------解决方案--------------------
不懂,帮顶