zoukankan      html  css  js  c++  java
  • JAVA学习第六十三课 — 关于client服务端 && URL类 & URLConnection

    常见的client和服务端

    client:

          浏览器:IE:弹窗体,猎豹:弹窗体。多标签,争强效果

    服务端:

          server:TomCat:1.处理请求 2.给予应答

    想让TomCat为我们工作。那么java写的相关类类必须实现interface Serverlet

    浏览器强大之处就在于解析能力,众多格式,都能够解析

    服务端和client原理

    自己定义服务端:

    public static void main(String[] args) throws IOException {
    		
    		ServerSocket ss = new ServerSocket(9090);//Tomcat是8080
    
    		Socket socket = ss.accept();
    		InputStream in = socket.getInputStream();
    		
    		System.out.println("ip : "+socket.getInetAddress().getHostAddress());
    		
    		byte[] buf = new byte[1024];
    		
    		int len = in.read(buf);
    		String text = new String(buf,0,len);
    		System.out.println(text);
    		PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
    		out.println("你好");
    		socket.close();
    		ss.close();
    	}


    使用已有的clientIE,了解client给服务端发送的什么请求?

    请求行: 请求方式 /1.html 请求资源路径:http协议版本号

    请求消息头:属性名:属性值

    请求体

    模拟一个浏览器获取信息

    	public static void main(String[] args) throws IOException {
    		
    		Socket s = new Socket("192.168.1.1",8080);//向tomcat获取。浏览器信息
    		
    		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    		
    		out.println("GET / HTTP /.....");
    		out.println("....");
    		out.println("....");
    		out.println("....");
    		out.println("....");
    		out.println("....");
    		
    		InputStream in = s.getInputStream();
    		byte[] buf = new byte[1024];
    		int len = in.read(buf);
    		String line = new String(buf,0,len);
    		
    		System.out.println(line);//得到就是本地写的html代码
    		s.close();
    	}

    得到的应答:

    应答行:http的协议版本号 应答状态码 应答状态描写叙述信息

    应答消息属性。 属性名: 属性值

    应答体:->上述的html源代码

    PS:浏览器太难写了,所以众多厂商都是应用原有的IE的内核


    类URL

    URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。

    资源能够是简单的文件或文件夹,也能够是对更为复杂的对象的引用。比如对数据库或搜索引擎的查询

    每一个URL都是URI,但不是每一个URI都是URL

    	public static void URL_Demo() throws MalformedURLException {
    	
    		String strurl = "http://127.0.0.1:8080/myhtml/1.html?

    name=wang"; //http://www.baidu.com/baidu?word=java,在百度地址栏搜索java URL url = new URL(strurl); System.out.println("Protocol:"+url.getProtocol());//获取主机协议 System.out.println("Host:"+url.getHost());//获取主机名 System.out.println("Port:"+url.getPort());//获取port System.out.println("File:"+url.getFile());//获取文件 System.out.println("Path:"+url.getPath());//获取路径部分 System.out.println("Query:"+url.getQuery());//获取查询部分 }

    Protocol:http
    Host:127.0.0.1
    Port:8080
    File:/myhtml/1.html?name=wang
    Path:/myhtml/1.html
    Query:name=wang

    public static void URL_Demo() throws IOException {
    	
    		String strurl = "http://127.0.0.1:8080/myhtml/1.html?

    name=wang"; URL url = new URL(strurl); InputStream in = url.openStream();//打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。 /* * 原理: * openConnection() * 返回一个 URLConnection 对象。它表示到 URL 所引用的远程对象的连接。

    * URLConnection conn = url.openConnection(); * System.out.println(connection); * 底层封装完了关于url的http的解析方式。这个对象就是java内置的能够解析详细协议的对象+socket * URLConnection类中 * 1.String str = conn.getHeaderField("Contend-Type"); * System.out.println(str);//应答一个文本类型的消息 * 然后就能够依据应答的结果。推断文本是何类型,依据指定的解析器,解析数据 * 实际上用的是Socket,加协议 * 2.InputStream in = conn.GetInputStream();相同得到1.html的应答体 * * 所以url.openStream()的原理就是: * URLConnection conn = url.openConnection(); * InputStream in = conn.GetInputStream(); */ byte[] buf = new byte[1024]; int len = in.read(buf); String str = new String(buf,0,len); System.out.println(str);//得到1.html的应答体,url帮助解析成html源代码 in.close(); }


    常见的网络架构
    1.C/S: client / server (客户端。服务端)

    早期:

        VC++,VB都是做C/S

    特点:

        该结构的软件,client和服务端都须要编写,开发成本高。维护麻烦

    优点:

        client在本地能够分担一部分运算。360杀毒,游戏的3D效果都是在本地运算

    2.B/S :browser / server(浏览器,服务端)

    特点:

         该结构的软件,仅仅开发服务端,client直接由浏览器取代

         开发成本相对低。维护更为简单

    缺点:全部运算都是在server

  • 相关阅读:
    JavaScript深入之参数按值传递
    计算机网络:这是一份全面 & 详细 的TCP协议学习指南
    前端点击下载excel表格数据
    为什么选择器:last-child有时没有起作用?
    深入理解防抖和节流函数
    收集常用正则表达式
    深入研究-webkit-overflow-scrolling:touch及ios滚动
    一文搞懂网络知识,IP、子网掩码、网关、DNS、端口号
    正则替换replace中$1的用法
    数据库连接池性能对比
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6826292.html
Copyright © 2011-2022 走看看