基础

网络模型:4、5、7

网络传输层协议:TCP/IP和UDP协议

TCP:面向连接,传输大小限制,安全可靠、效率低

三次握手:

第一次:客户端向服务器发送连接请求

第二次:服务器向客户端响应连接请求

第三次:客户端与服务器建立连接

四次挥手:

第一次:客户端向服务器发送断开连接请求

第二次:服务器向客户端响应收到断开连接请求(因为TCP连接是双向的,所以此时服务器依然可以向客户端发送信息)

第三次:客户端等待服务器发送信号完成,向服务器确定全部信息发送完毕,并且断开客户端与服务器的连接

第四次:服务器向客户端断开连接

Java 实现TCP

ServerSocket 服务端套接字 核心方法:accept

Socker 套接字 核心方法:getInputStream 和getOutputStream

UDP:非面向连接,效率高,不安全、不可靠

Java的实现

DatagramSocket 套接字对象,指明本机的端口信息

DatagramPacket 数据包,可以用来发送消息,也可以用来接收消息

程序架构

C/S     Client Server 基于客户端服务器的程序架构,需要一个服务器或者N个客户端,实现数据的传输

B/S     Browser Server 基于浏览器的程序结构,不需要客户端,只需要通过浏览器访问即可

get和post的区别

1.GET把参数包含在URL中,POST通过request body传递参数

2.get传递数据有大小限制,post没有

3.GET产生一个TCP数据包;POST产生两个TCP数据包

http响应状态码

400:请求参数有误

403:服务器已经理解请求,但是拒绝执行它

404:请求失败,找不到页面

405:请求方法错误,请求行中指定的请求方法不能被用于请求相应的资源

500:后台代码错误

进阶:NIO

NIO:New IO 同步非阻塞IO流

三大核心:1.通道Channel 实现连接 2.缓冲区 Buffer 实现消息的读取或发送的载体3.选择器 Selector 多路复用的体现 监听IO状态,4大事件

ServerSocketChannel 服务端套接字通道

SocketChannel 套接字通道对象 write 和read

ByteBuffer 一定要记得切换指针位置

高手:Netty

NIO原生的封装的一个开源框架,简化了原生的操作

场景:自定义通信协议(软硬交互、即时通讯、信息采集、消息队列等)