使用多线程搭建一个聊天室
我们结合多线程技术,实现客户端和服务端任意通讯的“聊天室”功能
项目环境:JDK 1.8,IDE(IntelliJ IDEA)
客户端 Client:
package net.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 这个是客户端
* 使用线程创建对象
*/
public class Client {
public static void main(String[] args) throws IOException {
System.out.println("客户端启动");
System.out.println("请输入用户名:");
//从键盘获取值
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String userName = br.readLine();
//1. 创建Socket对象,用于连接服务器
Socket client = new Socket("127.0.0.1",9999);
//创建发送的线程类对象
Send send = new Send(client,userName);
//创建接收的线程类对象
Receive receive = new Receive(client);
//创建Thread类对象并启动线程
new Thread(send).start();
new Thread(receive).start();
}
}
CloseUtil:
package net.demo;
import java.io.Closeable;
import java.io.IOException;
public class CloseUtil {
public static void closeAll(Closeable... able){
for (Closeable c : able) {
if (c!=null) {
try {
c.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
Send: 发送数据的线程类
package net.demo;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 发送数据的线程类
* 发送数据到服务器
* 发送数据的线程类
* 发送数据到服务器端
*/
public class Send implements Runnable{