网络编程

概述

  • 计算机网络
    • 计算机网络系统就是利用通信设备和线路将地理位置不同、功能独立的多个计算机系统互联起来,以功能完善的网络软件实现网络中资源共享和信息传递的系统。
  • 网络编程目的
    • 通过实现网络软件,与各个计算机传递共享资源
  • 如何定位各个计算机
    • 下面组成要素进行分析

组成要素

    1. IP :计算机的互联网地址
    2. 端口 :计算机中软件的具体进程的识别号,任务管理器中为PID
    3. 通信协议 :计算机相互之间传递资源,需要遵循的约定 如:速率、传输码率、代码结构等

IP

  • 有两种类型

    • ipv4 : 由4个字节组成 每个字节的范围是 0-255 (2^8) 如:(0-255).(0-255).(0-255).(0-255)
    • ipv6 :由8个字节组成 每个字节的范围是0-65535 (2^16) 如:(0-FFFF).(0-FFFF).(0-FFFF).(0-FFFF)
      • 因为范围有216,所以采用十六进制表示,一个F为0-F共16个数字或字母,即24,有4位数,所以表示16位就有最多4位数字或字母
  • IP的分类 (ABCD类)

    • A类网络的IP地址范围为:1.0.0.0-126.255.255.254
    • B类网络的IP地址范围为:128.0.0.0-191.255.255.254
    • C类网络的IP地址范围为:192.0.0.0-223.255.255.254
    • d类网络的IP地址范围为:224.0.0.0-239.255.255.255
    • 规律是,把第一个字节拆分一半前半部分为A类,后半部分继续递归拆分

端口

  • 分类
    • 公有端口 0 - 1023 (2^10)
    • 程序注册端口 0 - 49151 (215+214)
    • 动态、私有端口 49152 - 65535 (2^16)

通信协议

  • OSI七层模型 和 TCP/IP 五层模型
    • 网络编程

TCP协议

  • 生活例子:打电话

  • 特性 :连接 稳定

  • 流程

    • 最少需要两对象 :客户端 和 服务端
    • 经过 三次握手 和 四次分手
      • 三次握手:
        • A获取B的地址端口,尝试与B连接
        • B监听到有连接,接取连接回应A
        • A接收到B回应,再次回应B
      • 四次分手:
        • A通知B需要断开连接
        • B接到通知询问A确定是否断开
        • A回应B确定,并断开了连接
        • B接到A回应,并断开了连接
  • 代码例子

    • 客户端
    class A{
        public static void main(String[] args){
            //创建socket连接 参数为 ip 和 port
            Socket socket = new Socket(InetAddress.getByName("0.0.0.0"),port);
            //socket连接成功不报错,可以获取输出流回应服务端
            OutputStream os = socket.getOutputStream();
            //写入数据
            os.write("hello world".getBytes());
            //结束输出
            socket.shutdownOutput();
            //后续结束连接关闭服务
            os.close();
            socket.close();
        }
    }
    
    • 服务端
    class b{
        public static void main(String[] args){
            //创建服务器的socket 并开放其端口号
            ServerSocket socket = new ServerSocket(port);
            //通过服务器的socket监听发过来的连接请求 (阻塞连接)
            Socket accept = socket.accept();
            //连接成功接收客户端发来的数据
            InputStream is = accept.getInputStream();
            //I/O读写数据
            byte[] buffer = new byte[1024];
            int len = 0;
            //因不知道数据类型,用管道流接收
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            
            while((len=is.read(buffer))!= -1){
                baos.write(buffer,0,len);
            }
            System.out.print(baos.toString());
        }
    }
    

UDP协议

  • 生活例子:发短信

  • 特性:不稳定 单方面

  • 流程:

    • 需要接收方的 IP 和 端口 信息
    • 通过连接的方式 DatagramSocket
    • 发送的内容
  • 代码例子

    • 发送方
    class A{
        public static void main(String[] args){
            //创建DatagramSocket进行发送
            DatagramSocket socket = new DatagramSocket();
            //发送需要的内容 参数需要 数据字节数组 数组偏移量 数组长度 IP 端口
            byte[] buffer = "hello world".getBytes();
            DatagramPacket packet = new 			 DatamgramPacket(buffer,0,buffer.length,InetAddress.getByName("0.0.0.0"),port);
            //发送
            socket.send(packet);
        }
    }
    
    • 接收方
    class B{
        public static void main(String[] args){
            //创建DatagramSocket连接 ,并开放其端口
            DatagramSocket socket = new DatagramSocket(port);
            //需要接收内容的驿站
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
            //接收
            socket.receive(packet);
            //输出其信息
            byte[] data = packet.getData();
            System.out.print(new String(data,0,data.length))
        }
    }
    

URL

  • 定义:统一资源定位符,定位互联网上的某一个资源
  • 定位的格式: 协议:// IP : port /项目名/资源
//如:利用url下载网上的资源
Url url = new Url(定位的格式);
//调用url的连接方法获取输入流
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
InputStream fis = connection.getInputStream();
//利用IO输出即可

网络编程

上一篇:ERP——实施顾问


下一篇:性能基准DevOps之如何提升脚本执行效率