java基础之网络

JAVA 的网络

一.概述:

    1.1 简介:

        在操做系统中,网络和文件其实都是经过I/O总线链接到系统。都会有一个定位类,例如:file和Url,而后再经过input,output等I/O类才进行数据交互。本文介绍下java的网络,及其相关类。java

    1.2 网络协议

        不一样设备之间、不一样进程之间的通讯都是须要通讯协议来格式化数据、分装,而后组装数据、反格式化数据。算法

        a) 7层协议:数据库

 

整体划分:编程

            ISO提出的OSI(Open System Interconnection)模型将网络分为七层,即 物理层( Physical )、 数据链路层(Data Link)、网络层(Network)、 传输层(Transport)、 会话层(Session)、 表示层(Presentation)和 应用层(Application)。浏览器

        1. 物理层服务器

            物理层(Physical layer)是参考模型的最低层。该层是网络通讯的数据传输介质,由链接不一样结点的电缆与设备共同构成。主要功能是:利用传输介质为数据链路层提供物理链接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。网络

        2. 数据链路层socket

            数据链路层(Data link layer)是参考模型的第2层。 主要功能是:在物理层提供的服务基础上,在通讯的实体间创建数据链路链接,传输以“帧”为单位的数据包,并采用差错控制与 流量控制方法,使有差错的物理线路变成无差错的数据链路。tcp

        3. 网络层加密

            网络层(Network layer)是参考模型的第3层。主要功能是:为数据在结点之间传输建立逻辑链路,经过路由选择算法为分组经过通讯子网选择最适当的路径,以及实现拥塞控制、 网络互联等功能。

        4. 传输层

            传输层(Transport layer)是参考模型的第4层。主要功能是向用户提供可靠的端到端(End-to-End)服务,处理数据包错误、数据包次序,以及其余一些关键传输问题。传输层向高层屏蔽了下层数据通讯的细节,所以,它是计算机通讯体系结构中关键的一层。

        5. 会话层

            会话层(Session layer)是参考模型的第5层。主要功能是:负责维扩两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。

        6. 表示层

            表示层(Presentation layer)是参考模型的第6层。主要功能是:用于处理在两个通讯系统中交换信息的表示方式,主要包括数据格式变换、 数据加密与解密、数据压缩与恢复等功能。

        7. 应用层

            应用层(Application layer)是参考模型的最高层。主要功能是:为 应用软件提供了不少服务,例如文件服务器、数据库服务、 电子邮件与其余网络软件服务。


        b) 5层协议

 


名称 功能 协议
应用层 文件传输、电子邮件、文件服务、虚拟终端 TFTP(文件传输)、HTTP(万维网)、SNMP、FTP、SMTP、DNS、Telnet(远程终端接入)
传输层 提供端对端的接口 TCP、UDP
网络层 为数据包选择路由 IP、ICMP、OSPF、EIGRP、Lgmp
数据链路层 传送有地址的帧以及错误检测功能 SLIP、CSLIP、PPP、MTU
物理层 以二进制数据形式在物理媒体上传输数据 ISO21十、IEEE80二、IEEE802.2


        c)  TCP数据封装

            tcp封装数据包的格式为:

            数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)

            IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)

            TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)


        d)  tcp链接《3次握手为主》

            tcp的3次握手

 

            tcp的4次握手

 

    1.3  java依赖类:

        java.net.InetAddress:ip处理类,将域名或者IP解析为 ip/域名的形式。

        java.net.URL:网络链接类。封装了InetAddress和系统网络链接。处理链接问题,和File类对文件的做用类似。

        java.net.URLConnection:网络处理类,链接后处理数据交互等功能。

        java.net.ServerSocket:服务器

        java.net.Socket

二.案例

    2.1 InAddress:地址处理

/**
	 * @throws Exception
	 * @see 域名处理:返回域名/IP
	 */
	@Test
	public void intAddress() throws Exception {
		InetAddress local = InetAddress.getLocalHost();
		System.out.println("本地IP:" + local.getHostAddress());//本地IP:192.168.124.1
		System.out.println("本地名称:" + local.getHostName());//本地名称:ssHss-PC
		InetAddress[] local2 = InetAddress.getAllByName("www.baidu.com");//IP180.97.33.108
		for (InetAddress ia : local2) {
			System.out.println("IP" + ia.getHostAddress());
			System.out.println("名称" + ia.getHostName());
			//IP:180.97.33.108
			//名称:www.baidu.com
			//IP:180.97.33.107
			//名称:www.baidu.com
		}
	}

    3.2 URLConnection

/**
        * @throws Exception
        * @see URLConnection
        * @see 域名类:URL、处理链接前的工做(协议、域名、IP、端口、链接)
        * @See 链接处理类类:URLConnection、处理链接后的工做(读写)
        */
public void testURL() throws Exception {
              // 域名
              String urlPath = "http://www.baidu.com";
              // 生成 URL类
              URL url = new URL(urlPath);
              // 链接
              URLConnection urlconn = url.openConnection();
              System.out.println("========== head  ===========");
              Map<String, List<String>> map = urlconn.getHeaderFields();
              for (Entry<String, List<String>> entry : map.entrySet()) {
                     String key = entry.getKey();
                     List<String> value = entry.getValue();
                     System.out.println(key + "  :  " + value);
              }
 
              System.out.println("========== inputStream    ================");
              InputStream urlinput = urlconn.getInputStream();
 
              /**
               * 以字符
               */
              BufferedReader r = new BufferedReader(new InputStreamReader(urlinput));
              String readLine = null;
              int line = 1;
              while ((readLine = r.readLine()) != null) {
                     System.out.println(line + "  :" + readLine);
                     line++;
              }
              /**
               * 以字节
               */
              // byte[] tempBytes = new byte[100];
              // int byteRead = 0;
              // while ((byteRead = urlinput.read(tempBytes)) != -1) {
              // System.out.println(tempBytes);
              // }
       }

        链接www.baidu.com获取的信息:

        浏览器截图

        console打印图:

    3.3 Socket编程(TCP协议)

        a) 监听80端口:

    /**
     * @throws IOException
     * @see severSocket :服务器Socket
     * @see socket:网络处理对象
     */
    @Test
    public void serviceSocket() throws IOException {
       // 建立ServerSocket(端口)
       ServerSocket server = new ServerSocket(8080);
       // 监听--》阻塞(等待链接)
       Socket socket = server.accept();
       // 处理数据
       BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
       String readline = null;
       while ((readline = buffer.readLine()) != null) {
           System.out.println(readline);
       }
    }

        Console图

 

        browers图

b) Server-Clinet实例

server-socket:

	/**
	 * @throws IOException
	 * @see severSocket :服务器Socket
	 * @see socket:网络处理对象
	 */
	@Test
	public void serviceSocket() throws IOException {
		// 建立ServerSocket(端口)
		ServerSocket server = new ServerSocket(8080);
		// 监听--》阻塞(等待链接)
		Socket socket = server.accept();

		PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
		System.out.println("========== server-write  ===========");
		out.println("你好!--我是server");
		// 处理数据
		BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String readline = null;
		System.out.println("========== server-read  ===========");
		while ((readline = buffer.readLine()) != null) {
			System.out.println(readline);
		}

		out.close();
		socket.close();

	}

client:

/**
     * @throws IOException
     * @See clientSocket
     */
    @Test
    public void clientSocket() throws Exception {
       Socket s = new Socket("localhost", 8080);
       PrintWriter out = new PrintWriter(s.getOutputStream(), true);
       System.out.println("========== client-write  ===========");
       out.println("你好!..我是client");
        BufferedReader buffer = new BufferedReader(new InputStreamReader(s.getInputStream()));
       String readline = null;
       System.out.println("========== client-read  ===========");
       while ((readline = buffer.readLine()) != null) {
           System.out.println(readline);
       }
 
       out.close();
       s.close();
 
    }
相关文章
相关标签/搜索