WebProxyServer

package cn.com.demo;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class WebProxyServer {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(9999);
        while (true) {
            Socket client = server.accept();// 阻塞
            try {
                InputStream clientIn = client.getInputStream();
                OutputStream clientOut = client.getOutputStream();

                // 从clientIn中获取浏览器发过来的web请求
                byte[] bytes = new byte[1024];
                int count = clientIn.read(bytes);
                String requestStr = new String(bytes, 0, count);
                System.out.println("请求字符串是:");
                System.out.println(requestStr);
                // 从requestStr中获取目标服务器的域名(www.sina.com.cn)和端口(80)
                String[] reqLines = requestStr.split("\r\n");
                String[] line1s = reqLines[0].split(" ");
                int httpLength = "http://".length();
                String serverStr = line1s[1].substring(httpLength, line1s[1]
                        .indexOf("/", httpLength));
                int index = serverStr.indexOf(":");
                int port = 80;
                if (index != -1) {
                    port = Integer.parseInt(serverStr.substring(index + 1));
                    serverStr = serverStr.substring(0, index);
                }

                Socket serverSocket = new Socket(serverStr, port);
                InputStream serverIn = serverSocket.getInputStream();
                InputStreamReader reader = new InputStreamReader(serverIn);
                
                OutputStream serverOut = serverSocket.getOutputStream();
                serverOut.write(requestStr.getBytes());
                serverOut.flush();

                // 从serverIn中获取服务器(www.sina.com.cn)的响应
                String responseStr = "xxx";
                char[] chars = new char[1024];
                StringBuffer strBuff = new StringBuffer();

                count = -1;
                while ((count = reader.read(chars)) != -1) {
                    strBuff.append(chars, 0, count);
                }
                serverSocket.close();
                responseStr = strBuff.toString();
                System.out.println(responseStr);
                clientOut.write(responseStr.getBytes());
                clientOut.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

 

posted @ 2012-10-20 19:34  邹晟  阅读(2116)  评论(0编辑  收藏  举报