TCP BIO
背景
网络编程的基本模型是Clien/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过socket进行通信。socket相当于通信的媒介,用来传输数据。
Java处理TCP的类主要有Socket和ServerSocket,基于传统同步阻塞模型(Blocking IO)开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功之后,双方通过输入和输出流进行同步阻塞式通信。
模型
下图是一个BIO的服务端通信模型:采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接受到客户端连接请求后为每一个客户端创建一个新的线程进行链路处理,处理完之后通过流应答给客户端,线程销毁。
这种模型的缺点十分明显,当客户端大量请求到达时,由于线程笨重、占用资源大等特点,服务端无法承受巨大的开销,易导致服务宕机。
代码
首先是客户端代码,在代码中可以看到,客户端向127.0.0.1:20006的地址发送连接请求,当连接建立时,通过IO流输出字符串到socket中&#