一、需求分析
- 用户与用户之间1-1或1-n通讯
二、技术分析
(一)客户端
- 客户端的功能有两个:发消息和接消息
- 发消息:使用Socket技术的流式输出,配合打印流封装发送。
- 接信息:使用读取专用线程,搭配字符缓冲流读取。
(二)服务端
- 服务端的功能:转发消息。
- 实现转发功能:
- 1、创建服务通道ServerSocket
- 2、建立线程池ExecutorService->ThreadPoolExecutor
- 3、等待连接
- 4、向集合添加通道对象
- 5、添加转发任务到线程池任务队列
- 6、转发线程类的重写
- 第 1 部分:接收信息: 字符缓冲流读取接收的信息。
- 第 2 部分:转发信息: 遍历所有通道,获取输出流输出数据。
三、实现代码
客户端
class Client1{
public static void main(String[] args) {
try {
//建立通道
Socket sender = new Socket(InetAddress.getLocalHost().getHostAddress(),7777);
new ClientServiceThread(sender).start();
Scanner in = new Scanner(System.in);
if (sender.isConnected()) System.out.println(sender.getRemoteSocketAddress() + " 已连接!");
//输出流
PrintStream outStream = new PrintStream(sender.getOutputStream(),true);
String message;
while(!(message = in.nextLine()).equals("exit")){
outStream.println(message);
}
} catch (IOException e) {
System.out.println("连接已断开");
}
}
}
class Client2{
public static