暑期自学 Day 06 | 网络编程(一)

网络通信协议

TCP/IP 协议
  • 将网络传输分为四层模型:
    • 应用层:规定应用之间传输的格式,HTTP,FTP 协议等
    • 传输层:将数据传输到网络层,TCP,UDP
    • 网络层:核心,将传输数据分组,传输到接收端,IP 协议
    • 链路层:对网络连接设备的驱动协议,光纤,网线
UDP (User Datagram Protocol) 用户数据报协议
  • 无连接通信协议,接收端发送端不用建立连接
  • 耗资小,传输效率高:视频直播…
  • 偶尔丢包,但无太大影响
  • 不对报文进行重组,分片,所以需要注意数据大小,数据大小限制在 64KB 以内
  • 网络包中头部有8个字节
TCP (Transmission Control Protocol) 传输控制协议
  • 需要客户端和服务器通过三次握手建立连接
    • 第一次握手:客户端向服务器发送连接请求,等待服务器确认
    • 第二次握手:服务器给客户端响应,通知其收到了连接请求
    • 第三次握手:客户端再次发送确认信息,确认连接
  • 有确认机制,丢包可以重发
  • 可以对大数据拆分,客户端进行重组
  • 网络包中头部有32字节
IP地址
  • 网络中计算机设备的唯一编号
  • IPv4:32位二进制,4个字节
  • IPv6:128位二进制,8组16进制数
端口号
  • 两个字节组成,在 0~65535之间,1024前的端口号已经被系统分配完成,无法使用
  • 每个软件有随机分配的单独端口号,无法重复
  • 保证数据准确无误传输到对方计算机指定软件上
  • 常用端口号
    • 80:网络端口号
    • 3306:mysql 端口号;1521:oracle 端口号
    • 8080:Tomcat 端口号

服务器端和客户端的交互

  • 根据网络通信协议,通过三次握手进行连接
  • 在 Java 中通过 IO 流来传输数据
  • 服务器本身没有 IO 流对象,通过 accept() 方法获取客户端的 IO 流对象和该客户端进行交互
  • Java 中为了建立 TCP 通信,为客户端提供了 Socket 类,为服务器提供了 ServerSocket 类
Socket 和 Server Socket
  • 服务器端

    • ServerSocket(int port) 绑定到指定端口号
    • 使用 accept() 获取请求的客户端对象
    • 使用步骤:
      • 创建 ServerSocket 对象和系统指定端口号
      • 使用 accept() 获取请求的客户端对象 Socket
      • 使用 getInputStream() 获取客户端的字节输入流对象
      • 使用 InputStream 中的 read,读取客户端发送的数据
      • 使用 getOutputStream()获取客户端字节输出流对象
      • 使用 OutputStream 中的 write,给客户端写回数据
      • 释放资源
  • 客户端

    • Socket(String host, int port) 指定 IP 地址和端口
    • 使用步骤和服务器端基本相同,要通过 Socket 的 getInputStream(),getOnputStream() 方法获取字节输入输出流
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!