使用基于tcp协议的socket创建聊天室,
昨天我写的博客已经介绍了怎么使用 ServerSocket 创建服务端,以及服务端怎么返回数据给客户端
昨天写的博客有个缺陷,就是 客户端只能 先发送,后读取,对于正常情况来说应该是,客户端读取和发送是互相不相干涉的两个步骤,所以这里就得使用到多线程了,为 客户端发送数据,和接收数据各开辟一条道路。
首先来看看客户端的发送消息:
客户端发送消息,得跟 Socket 关联起来,里面则有 输入输出流,因为客户端要想发送则必须有输出流,输入流则是因为我们在控制台使用,使用输入流输入数据
那么我们来看看 ClientSend 类
/**
* 发送数据线程
* @author snow
*
*/
public class ClientSend implements Runnable {
private BufferedInputStream bis;
private BufferedOutputStream bos;
private Socket client;
private boolean isRuning = true ;
/**
* 构造方法,初始化输入输出
* @param client
*/
public ClientSend(Socket client) {
this.bis = new BufferedInputStream( System.in );
this.client = client;
try {
this.bos = new BufferedOutputStream( this.client.getOutputStream() );
} catch (IOException e) {
e.printStackTrace();
isRuning = false;
CloseUtil.closeAll(bos,bis,client);
}
}
/**
* 获取控制台输入的数据
* @return
*/
private S