暑期自学 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 协议》,转载必须注明作者和本文链接
推荐文章: