日期:2014-05-17  浏览次数:20699 次

用ServerSocket接收Http请求
我想用ServerSocket监听一个端口,然后通过在浏览器中输入http://localhost:port/的方式访问这个server。有没有谁遇到过这样的问题?

------解决方案--------------------
Java code
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.File;

public class HttpServer
{
    /**
     * WEB_ROOT is the directory where our HTML and other files reside. For
     * this package, WEB_ROOT is the "webroot" directory under the working
     * directory. The working directory is the location in the file system
     * from where the java command was invoked.
     */
    public static final String WEB_ROOT = System.getProperty("user.dir")+File.separator+"webroot";
    // shutdown command
    private static final String SHUTDOWN_COMMAND = "/SHUTDOWN";
    // the shutdown command received
    private boolean shutdown = false;

    public static void main(String[] args)
    {
        HttpServer server = new HttpServer();
        server.await();
    }

    public void await()
    {
        ServerSocket serverSocket = null;
        int port = 8080;
        try
        {
            serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));
        }
        catch (IOException e)
        {
            e.printStackTrace();
            System.exit(1);
        }
        // Loop waiting for a request
        while (!shutdown)
        {
            Socket socket = null;
            InputStream input = null;
            OutputStream output = null;
            try
            {
                socket = serverSocket.accept();
                input = socket.getInputStream();
                output = socket.getOutputStream();
                // create Request object and parse
                Request request = new Request(input);
                request.parse();
                // create Response object
                Response response = new Response(output);
                response.setRequest(request);
                response.sendStaticResource();
                // Close the socket
                socket.close();
                // check if the previous URI is a shutdown
                // command
                shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
            }
            catch (Exception e)
            {
                e.printStackTrace();
                continue;
            }
        }
    }
}

------解决方案--------------------
忽悠人用的。

Java code

package org.sl.test;

import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

/**
 * 忽悠人的http 服务器
 * @author shanl
 *
 */
public class HttpServer {
    static public void start(){
        StringBuilder echo = new StringBuilder();
        echo.append("<html>");
        echo.append("<head>");
        echo.append("<title>hello</title>");
        echo.append("</head>");
        echo.append("<body>");
        echo.append("<center>");
        echo.append("<b1>Welcome to my home page.</b1>");
        echo.append("</center>");
        echo.append("</body>");
        echo.append("</html>");
        
        ServerSocket ss = null;
        int port = 8010;
        SocketAddress address = null;
        Socket connect = null;
        byte[] buffer = new byte[512];
        int readLen = 0;
        
        try{
            System.out.println("开始监听:" + port);
            address = new InetSocketAddres