Java_网络通信

网络编程

  1. 什么是网络编程?
    • 可以让设备中的程序与网络搜索其他设备中的程序进行数据交互(实现网络通信的)
  2. Java提供了哪些网络编程的解决方法?
    • java.net.*包下提供了网络编程的解决方法
  3. 基本的通信架构
    • 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)
    • 无论是CS架构,还是BS架构的软件必须依赖网络编程

网络通信三要素

IP地址

  1. IP(Internet Protocol):全称”互联网协议地址“,是分配给上网设备的唯一标识

  2. IP地址有两种形式:

    • IPv4:由32bit(4字节)组成,点分十进制表示法
    • IPv6:共128位,号称可以为地球每一粒沙子编号
    • IPv6分成8段表示,每段每四位编码成一个十六进制位表示,数之间用(:)分开
  3. IP域名:

    • 电脑的DNS服务器会将域名解析成IP地址,然后再使用该IP地址访问对应的服务器
  4. 公网IP、内网IP

    • 公网IP:是可以连接互联网的IP地址
    • 内网IP:也叫局域网IP,只能组织机构内部使用
    • 192.168.开头的就是常见的局域网地址,范围即为192.168.00--192.168.255.255,专门为组织机构内部使用
  5. 特殊IP地址:

    • 127.0.0.1localhost:代表本机IP,只会寻找当前所在的主机
  6. IP常用命令:

    • ipconfig :查看本机IP地址。
    • ping IP地址:查看网络是否连通
  7. InetAddress

    • 代表IP地址
  8. InetAddress的产用方法

    方法名称 说明
    public static InetAddress getLocalhost() 获取本机IP,会以一个InetAddress的对象返回
    public static InetAddress getByName(String host) 根据ip地址域名,返回一个inetAddress对象
    public String getHostName() 获取该ip地址对象对应的主机名
    public String getHostAddress() 获取该ip地址对象中的ip地址信息
    public boolean isReachable(int timeout) 在指定毫秒内,判断主机与该ip对应的主机是否联通

端口号

  1. 端口:
    • 标记正在计算机设备上运行的应用程序的,被规定为一个16位的二进制,范围是0~65535
  2. 分类:
    • 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用80,FIP占用21)
    • 注册端口:1024~49151,分配给用户进程或某些应用程序
    • 动态端口:49151~65535,之所以成为动态端口,是因为它一般不固定分配某种进程,而是动态分配
  3. 注意:我们自己开发发程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口一样,否则出错

协议

  1. 通信协议:

    • 网络上通信的设备,实现规定的连接规则,以及传输数据的规则被称为网络通信协议
  2. 开放式网络互联标准:OSI网络参考模型

    • OSI网络参考模型:全球网络互联标准

    • TCP/IP网络模型:事实上的国际标准

  3. 传输层的2个通信协议:

    • UDP(User Datagram Protocol):用户数据报协议
    • TCP(Transmission Control Protocol):传输控制协议
  4. UDP协议

    • 特点:无连接、不可靠通信
    • 不事先建立连接,按照包发,一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据(限制在64KB内)等
    • 发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到的数据也不返回确认,故是不可靠的。
    • 通信效率搞,用于语音通话,视频直播
  5. TCP协议

    • 特点:面向连接、可靠通信
    • TCP的最终目的:要保证在不可靠的信道上实现可靠的传输
    • TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接
    • 通信效率相对不高,用于网页、文件下载、支付
  6. TCP协议:三次握手建立可靠连接

    • 可靠连接:确定通信双方,收发消息都是正常无问题的!(全双工)
  7. TCP协议:四次挥手断开连接

    • 目的:确保双方数据的收发都已完成

UDP通信

  1. 特点:无连接、不可靠通信

  2. 不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了。

  3. Java提供了一个java.net.DatagramSocket类来实现UDP通信

  4. DatagramSocket:用于创建客户端、服务端

    构造方法 说明
    public DatagramSocket() 创建客户端的Socket对象,系统会随机分配一个端口号
    public DatagramSocket(int port) 创建服务端的Socket对象,并指定端口号
    方法名称 说明
    public void send(DatagramPacket dp) 发送数据包
    public void receive(DatagramPacket p) 使用数据包接收数据
  5. DatagramPacket:创建数据包

    构造方法 说明
    public DatagramPacket(byte[] buf, int length, InetAddress addresss, int port) 创建发出去的数据包对象
    public DatagramPacket(byte[] buf, int length) 创建用来接收数据的数据包
    方法名称 说明
    public int getLength() 获取数据包,实际接收到的字节个数
  6. 客户端实现步骤:

    • 创建DatagramSocket对象(客户端对象)
    • 创建DatagramPacket对象封装需要发送的数据(数据包对象)
    • 使用DatagramSocket对象的send方法,传入DatagramPacket对象
    • 释放资源
  7. 服务端实现步骤:

    • 创建DatagramSocket对象并指定端口(服务端对象)
    • 创建DatagramPacket对象接收对象(数据包对象)
    • 使用DatagramSocket对象的receive方法,传入DatagramPacket对象
    • 释放资源

TCP通信

  1. 特点:面向连接、可靠通信

  2. 通信双方事先会采用“三次握手”方式建立可靠联系,实现端到端通信,底层能保证数据成功成功传给服务段

  3. Java提供了一个java.net.Socket类来实现TCP通信

  4. TCP通信-客户端开发

    • 客户端程序就是通过java.net包下的Socket类来实现

      构造方法 说明
      public Socket(String host, int port) 根据指定的服务端ip、端口号请求与服务端建立连接,连接通过,就获得客户端socket
      方法名称 说明
      public OutputStream getOutputStream() 获得字节输出流
      public InputStream getInputStream() 获得字节输入流
  5. TCP通信-服务端开发

    • 服务端就是通过java.net包下的ServerSocket类来实现的

      构造方法 说明
      public ServerSocket(int port) 为服务端程序注册端口
      方法名称 说明
      public Socket accept() 阻塞等待用户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2024 LittleWin
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信