zoukankan      html  css  js  c++  java
  • 【JAVA网络流之浏览器与服务器模拟】

    一、模拟服务器获取浏览器请求http信息

    代码:

     1 package p06.TCPTransferImitateServer.p01.ImitateServer;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.PrintWriter;
     6 import java.net.ServerSocket;
     7 import java.net.Socket;
     8 /**
     9  * 该类模拟服务器,浏览器通过输入http://localhost:9988访问。
    10  * @author kuangdaoyizhimei
    11  *
    12  */
    13 public class ImitateServerDemo {
    14     public static void main(String[] args) throws IOException {
    15         ServerSocket ss=new ServerSocket(9988);
    16         Socket socket=ss.accept();
    17         InputStream is=socket.getInputStream();
    18         byte buf[]=new byte[10240];
    19         int length=is.read(buf);
    20         System.out.println(new String(buf,0,length));
    21         PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
    22         pw.println("我是狂盗一枝梅!");
    23         
    24         socket.shutdownOutput();
    25         socket.close();
    26         ss.close();
    27     }
    28 }
    View Code

    运行结果:

    1.服务端(得到浏览器请求信息):

    2.浏览器端(显示服务端响应的内容):

    二、模拟浏览器向服务器发出请求并获取服务器的响应内容。

    这里使用的服务器软件:apache

    代码:

     1 package p07.TCPTransferImitateBrowser.p01.ImitateBrowser;
     2 
     3 /**
     4  * 该类的作用是模拟浏览器向服务器请求一个页面,并将html代码显示出来
     5  * 请求信息从之前获取的浏览器请求得到
     6  */
     7 import java.io.BufferedReader;
     8 import java.io.IOException;
     9 import java.io.InputStream;
    10 import java.io.InputStreamReader;
    11 import java.io.OutputStream;
    12 import java.io.PrintWriter;
    13 import java.net.Socket;
    14 import java.net.UnknownHostException;
    15 
    16 
    17 public class ImitateBrowser {
    18     public static void main(String[] args) throws UnknownHostException, IOException {
    19         Socket socket=new Socket("192.168.209.1",80);
    20         InputStream is=socket.getInputStream();
    21         OutputStream os=socket.getOutputStream();
    22         PrintWriter pw=new PrintWriter(os,true);
    23         pw.println("GET /myWeb/index.html  HTTP/1.1");
    24         pw.println("Host: localhost");
    25         pw.println("Connection: close");//这里写close
    26         pw.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    27         pw.println("User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36");
    28         pw.println("Accept-Encoding: gzip,deflate,sdch");
    29         pw.println("Accept-Language: zh-CN,zh;q=0.8,en;q=0.6");
    30         pw.println();
    31         pw.println();
    32         pw.flush();
    33         BufferedReader br=new BufferedReader(new InputStreamReader(is));
    34         String str=null;
    35         System.out.println("响应内容:");
    36         while((str=br.readLine())!=null)
    37         {
    38             System.out.println(str);
    39         }
    40         br.close();
    41         socket.close();
    42     }
    43 }
    View Code

    运行结果:

    三、注意事项

    两个程序中的请求行和请求实体之间必须有一行空行,否则请求失败,这里使用pw.println();实现空行

  • 相关阅读:
    http状态码
    闭包
    节流和防抖
    继承方式
    array和object对比
    排序算法
    算法题
    汇编 asm 笔记
    FFMPEG 内部 YUV444P016 -> P010
    FFMPEG 内部 YUV444p16LE-> P016LE
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/4238310.html
Copyright © 2011-2022 走看看