java socket(4)

获取socket信息

打开本地tomcat服务器,访问"http://localhost:8080/index.jsp

以下通过java socket请求

package ch02;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class HTTPClient {
    String host = "127.0.0.1";
    int port = 80;
    Socket socket;

    public void createSocket() throws UnknownHostException, IOException {
        socket = new Socket(host, 8080);
    }

    public void communicate() throws Exception {
        // 注意GET后有空格,HTTP/1.1前有空格
        StringBuffer sb = new StringBuffer("GET " + "/index.jsp"
                + " HTTP/1.1\r\n");
        sb.append("Host:" + host + "\r\n");
        sb.append("Accept:*/*\r\n");
        sb.append("Accept-Language:zh-cn\r\n");
        sb.append("Accept-Encoding:gzip,deflate\r\n");
        sb.append("User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.0)\r\n");
        sb.append("Connection:Keep-Alive\r\n\r\n");
        // 发出HTTP请求
        /*
         * 先把字符串形式的的请求转换成字节数组(即字符串的编码,再请求)
         */
        OutputStream socketOut = socket.getOutputStream();
        socketOut.write(sb.toString().getBytes());
        socket.shutdownOutput();
        // 接收相应结果
        InputStream socketIn = socket.getInputStream();
        /*
         * 接收数据时,把接收的的数据写到一个ByteArrayOutputStream,它是一个容量能自动增长的缓冲区
         * len = socketIn.read(buff)) == -1表示读到了输入流的末尾
         */
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        
        byte[] buff = new byte[1024];
        int len = -1;
        while ((len = socketIn.read(buff)) != -1) {
            buffer.write(buff, 0, len);
        }
        System.out.println(new String(buffer.toByteArray()));
        /*
         * 如果接受的网页数据过大,先把数据保存到ByteArrayOutputStream会占用大量内存,更有效的做法是使用
         * Bufferedreader逐行读取
         */
        BufferedReader br=new BufferedReader(new InputStreamReader(socketIn));
        String data=null;
        while((data=br.readLine())!=null){
            System.out.println(data);
        }
        socket.close();
    }

    public static void main(String[] args) throws Exception {
        HTTPClient client = new HTTPClient();
        client.createSocket();
        client.communicate();
    }
}

控制台答应结果(部分) 

posted @ 2015-11-22 10:51  剑风云  阅读(148)  评论(0编辑  收藏  举报