网络编程、UDP、TCP、服务端优化方式

      最后更新:2022-02-24 03:38

      目录

      网络编程三要素

      IP

      网络编程-常见命令

      网络编程-Inetaddress类

      端口

      网络编程三要素-协议

      UDP-发送端

      UDP-接收端

      UDP-练习

      UDP-三种通讯方式

      UDP-组播代码实现

      UDP-广播代码实现

      TCP-客户端

      TCP-服务器

      TCP-原理分析

      TCP-三次握手

      TCP-四次握手

      TCP-练习1

      TCP-练习2

      服务端优化-循环

      服务端优化-UUID

      服务端优化-多线程

      服务端优化-线程池

      网络编程三要素

      什么是网络编程?
      在网络通信协议下, 不同计算机上运行的程序, 相互可以进行数据传输

      思考: A电脑的FeiQ, 发送信息给B电脑中的FeiQ, 需要知道什么条件才能发送?
      1. 电脑的地址
      2. FeiQ接收数据的入口
      3. 网络种传输数据的规则

      网络编程三要素
      1. IP地址: 设备在网络中的地址, 是一个唯一标识
      2. 端口号: 应用程序在设备中的唯一标识
      3. 协议: 数据在网络中传输的规则, 常见协议有UDP协议和TCP协议

      IP

      网络编程三要素: IP
      IP全称"互联网协议地址", 也称"IP地址", 是分配给上网设备的数字标签
      常见的IP分类为IPv4和IPv6

      平时我们用的是域名呀, 怎么不是IP地址?
      计算机的域名,通过DNS服务器解析域名为IP ,然后返回给计算机
      计算机 -> IP -> 目标服务器 -> 目标服务器返回数据

      IPv4:
      32bit位(4字节)组成 -> 11000000 10101000 00000001 01000010
      通过"点分十进制表示法" -> 192.168.1.66
      一个字节表示0-255(256位), 4个字节全球最多只能有将近43亿个IP, 不能满足现在互联网的发展

      IPv6:
      128bit位(16字节)组成, 分为8组 -> 略
      通过"冒分16进制表示法" -> 2001:0DB8:0000:0023:0008:0800:200C:417A
      每组16进制前面有0可以省略 -> 2001:DB8:0:23:8:800:200C:417A
      特殊情况: 如果计算出的16进制表示形式中有多个0表示的 -> "0位压缩表示法" -> FF01::1101

      网络编程-常见命令

      ipconfig: 查看本机IP地址

      在DOS命令窗口中输入cmd,在光标处输入 ipconfig,敲回车,计算机会打印出相对的
      IP地址。

      ping 域名/IP地址

      在DOS命令窗口中输入cmd,  在光标处输入  ping 域名/IP地址,敲回车检查指定域名网
      络是否通常, 还能查看其IP地址

      网络编程-Inetaddress类

      Inetaddress类作用?
      为了方便我们对IP地址的获取和操作, Inetaddress也表示Internet协议地址(IP地址)

      Inetaddress没有对外提供构造方法, 方法有静态和非静态的
      对于这种类, 都会提供一个静态方法返回该类对象,通过对象可以调用该类的方法


      常用方法:

      static Inetaddress getByName(String host); 获取主机名的IP对象
      String getHostName(); 获取主机名
      String getHostAddress(); 获取字符串类型的IP地址

      端口

      网络编程三要素: 端口
      应用程序在设备中的唯一标识

      端口的注意事项:
      1. 端口号用两个字节(整数)表示, 取值范围是0-65535
      2. 其中0-1024的被一些知名的网络服务或者应用占用
      3. 我们自己使用1024-65535之间的即可
      4. 一个端口号只能被一个应用程序使用

      扩展: 任务管理器中的PID
      任务管理器中的PID(Process Identification)是指进程识别号, 也就是进程标识符
      只要运行一个程序, 程序在内存中即为进程, 操作系统会自动分配一个标识
      它是进程运行时系统随机分配的,并不代表专门的进程, 在运行时PID是不会改变标识符的
      但是当终止程序后再运行PID标识符就会被系统回收, 就可能会被继续分配给新运行的程序

      扩展: 如何通过进程PID查询对应端口号
      CMD中输入netstat - nao, 展示当前计算机所有活动连接, 可以查看PID对应的端口号活动
      连接

      网络编程三要素-协议

      网络编程三要素: 协议
      计算机网络中, 连接和通信的规则被称为网络"通信协议"

      网络通信协议的分类
      1. UDP协议: 用户数据报协议, 面向无连接, 速度快,一次最多发送64K, 数据不安全,易丢失

      用户数据报协议(UDP,User Datagram Protocol)是 IP 上层的另一重要协议,它
      是面向无连接的、不可靠的数据报传输协议。

      2. TCP协议: 传输控制协议, 面向连接, 速度慢没有大小限制, 数据安全

      网络编程三要素小结
      要素1. IP, 设备在网络中的唯一标识
      要素2. 端口, 应用程序在设备中的唯一标识
      要素3. 协议, 数据在传输过程中遵守的规则

      UDP-发送端

      UDP发送步骤:
      1. 创建发送端的DatagramSocket对象
      2. 创建数据, 并将数据使用DatagramPacket打包
      3. 调用DatagramSocket的sent方法发送数据
      4. 释放资源

      UDP-接收端

      UDP接收数据步骤:
      1. 创建接收端的DatagramSocket对象, 指定接收数据的端口
      2. 创建一个新箱子DatagramPacket, 用于接收数据
      3. 调用DatagramSocket的receive方法接收数据, 放入新箱子中
      4. 解析数据包, 将数据展示在控制台
      5. 释放资源

      注意事项:
      1. 接收端创建DatagramSocket对象需要指定端口, 否则就是随机端口接收数据
      2. 需要先启动接收端, 在运行发送端
      3. 如果启动了接收端, 没有接收到数据, 会死等(阻塞)
      4. 接收到的数据, 可能放不满一个新箱子, 可以只将有效数据打印

      UDP-练习

      UDP通信练习需求:
      UDP发送端发送键盘录入的数据, 直到输入886, 发送数据结束
      UDP接收端由于不知道什么时候发送停止, 使用死循环一直接收

      UDP-三种通讯方式

      三种通讯方式
      1.单播: 一个发送端 -> 路由器 -> 一个接收端
      2.组播: IPv4的概念, 在IPv6中称为"多播", 一个发送端 -> 路由器 -> 一组接收端
      3.广播: 一个发送端 -> 路由器 -> 所有接收端

      UDP-组播代码实现

      UDP的组播
      发送端: 需要指定组播地址, 而不是端口号
      组播地址: 224.0.0.0-239.255.255.255
      预留地址: 224.0.0.0-224.0.0.255(计算机用了我们不能用)从224.0.1.0开始朝后
      接收端: 有一组计算机, 指定IP

      组播发送端步骤
      1. 创建组播发送端的DatagramSocket对象
      2. 创建数据, 并将数据使用DatagramPacket打包, 这次InetAddress对象为组播地址
      3. 调用DatagramSocket的sent方法发送数据
      4. 释放资源
      组播接收端步骤
      1. 创建组播接收端的MulticastSocket对象, 指定接收数据的端口
      2. 创建一个新箱子DatagramPacket, 用于接收数据
      3. 使用MulticastSocket的joinGroup方法, 指定组播地址
      4. 调用MulticastSocket的receive方法接收数据, 放入新箱子中
      5. 解析数据包, 将数据展示在控制台(转变成字符串形式打印)
      6. 释放资源

      UDP-广播代码实现

      UDP的广播
      广播地址
      255.255.255.255

      广播发送端步骤
      1. 创建广播发送端的DatagramSocket对象
      2. 创建数据, 并将数据使用DatagramPacket打包,InetAddress对象为广播地址
      3. 调用DatagramSocket的sent方法发送数据
      4. 释放资源
      广播接收端步骤
      1. 创建接收端的DatagramSocket对象, 指定接收数据的端口
      2. 创建一个新箱子DatagramPacket, 用于接收数据
      3. 调用DatagramSocket的receive方法接收数据, 放入新箱子中
      4. 解析数据包, 将数据展示在控制台(转变成字符串形式打印)
      5. 释放资源

      TCP-客户端

      TCP通信原理
      TCP通信协议是一种可靠的网络协议, 它在通信的两端各建立一个Socket对象
      通信之前要保证连接已经建立才可以, 否则报错
      通过Socket产生IO流来进行网络通信

      TCP发送端(客户端)步骤
      1. 创建客户端Socket对象, 指定服务器和端口
      2. 获取输出流, 写数据
      3. 释放资源

      TCP-服务器

      TCP接收端(服务器)步骤
      1. 创建服务端Scoket对象, 指定端口
      2. 等待客户链接
      3. 获取输入流对象, 读取数据
      4. 释放资源

      TCP-原理分析

      TCP通信原理分析及注意
      1.accept方法是阻塞的, 作用就是等待客户端连接,如果没有客户连接会一直等
      2. 客户端创建对象并连接服务器, 此时是通过"三次握手"保证跟服务器之间的连接
      3. 针对客户端是往外写(输出流), 针对服务器是往里读(输入流)
      4.read方法也是阻塞的,如果没有读取到数据也会一直等
      5. 客户端在关流时, 会写入一个结束标记作为终止(close()关流也有结束标记), 服务器读到结束标记才会结束读的动作
      6. 客户端最后断开连接时, 通过"四次挥手"来保证连接终止

      TCP-三次握手

      TCP三次握手: 应用于客户端创建对象并连接服务器时
      第一次: 客户端 -> 服务器发出请求, 等待服务确认
      第二次: 服务器 -> 客户端反馈响应, 告知客户端收到了请求
      第三次: 客户端 -> 服务器再次发出确认信息, 建立链接

      TCP-四次握手

      TCP四次挥手: 客户端最后断开连接时
      第一次: 客户端 -> 服务器发出取消连接的请求
      第二次: 服务器 -> 客户端反馈响应, 告知客户端收到了取消连接的请求
      第三次: 服务器 -> 客户端再次发出确认取消连接的请求信息 (已经存在了连接, 做数据最后
      的处理)
      第四次: 客户端 -> 服务器再次发出确认取消信息, 取消连接

      TCP-练习1

      TCP-练习2

      服务端优化-循环

      服务端优化-UUID

      UUID是Java提供的类, 可以生成一个随机且唯一的值 (重复几率太小, 可以忽略不计)

      1. public static UUID randomUUID(); 生成一个随机值
      2. toString();                                 返回随机值的字符串表现形式

      服务端优化-多线程

      服务端优化-线程池

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类