目录
三.TCP通信
3.1 TCP协议特点
3.2 TCP协议通信场景
3.3 TCP通信模型演示
3.4 Socket
3.5 ServerSocket
3.6 注意事项
3.7 案例
3.7.1 TCP通信—单发单收
3.7.2 TCP通信—多发多收
3.7.3 TCP通信—同时接收多个客户端的消息。
3.7.4 TCP通信—使用线程池优化(最终版)
四.TCP通信—即时通信
4.1 即时通信概述
4.2 案例
五.TCP通信—模拟B/S系统
5.1 什么是B/S架构
5.2 HTTP协议格式
5.3 案例
三.TCP通信
3.1 TCP协议特点
1. 使用TCP协议,必须双方先建立连接,他是一种面向连接的可靠通信协议。
2. 传输前,采用“三次握手”方式建立连接,所以是可靠的。
3. 在连接中可进行大数据量的传输。
4. 连接、发送数据都需要确认、且传输完毕后,还需释放已建立的连接,通信效率较低。
3.2 TCP协议通信场景
对信息安全要求较高的场景,例如:文件下载、金融等数据通信。
3.3 TCP通信模型演示
3.4 Socket
Socket类
用于创建Socket通信管道,用于连接服务端。
1.构造器
2.常用API
3.5 ServerSocket
用于注册服务器端的端口
1.构造器
2.常用API
3.6 注意事项
1. 客户端怎么发,服务端就应该怎么收。
2. 客户端如果没有消息,服务端会进入阻塞等待。
3. Socket一方关闭或者出现异常,对方Socket也会失效或者出错。
3.7 案例
3.7.1 TCP通信—单发单收
客户端步骤:
①创建客户端的
Socket
对象,请求与服务端的连接。
②使
用
socket
对象调用
getOutputStream
()
方法得到字节输出流。
③使用字节输出流完成数据的发送。
④释放资源:关闭
socket
管道。
客户端代码:
服务器端步骤:
①创建
ServerSocket
对象,注册服务端端口。
②调用
ServerSocket
对象的
accept()
方法,等待客户端的连接,并得到
Socket
管道对象。
③通过
Socket
对象调用
getInputStream
()
方法得到字节输入流、完成数据的接收。
④释放资源:关闭
socket
管道
服务器端代码:
3.7.2 TCP通信—多发多收
改进案例1:
①可以使用死循环控制服务端收完消息继续等待接收下一个消息。
②客户端也可以使用死循环等待用户不断输入消息。
③客户端一旦输入了
exit
,则关闭客户端程序,并释放资源。
客户端代码:
服务端代码:
注意:本例实现了多发多收,但是服务端只能与一个客户端进行通信,因为服务端只有一个线程。
3.7.3 TCP通信—同时接收多个客户端的消息。
服务端如何同时与多个客户端通信:引入多线程
客户端代码:
服务端代码:
线程代码:
3.7.4 TCP通信—使用线程池优化(最终版)
优点:
服务端可以复用线程处理多个客户端,可以避免系统瘫痪。
适合客户端通信时长较短的场景。
客户端代码:
服务器端代码:
线程代码:
四.TCP通信—即时通信
4.1 即时通信概述
之前我们的消息都是发给服务端的,即时通信是指一个客户端的消息发出去,其他客户端可以接收到。
即时通信需要进行端口转发的设计思想。
4.2 案例
实现即时通信。
客户端代码:
客户端接收消息的线程:
服务端代码:
服务端线程任务类:
五.TCP通信—模拟B/S系统
之前的客户端需要我们自己去开发实现,其实就是C/S架构。
5.1 什么是B/S架构
B/S架构就是使用浏览器去访问服务器端,不需要开发客户端。
5.2 HTTP协议格式
5.3 案例
服务器端代码:
线程任务类;