知识大全 java多线程控制台聊天室
Posted 消息
篇首语:不要以为你的努力徒劳无功,权当做磨练你的意志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java多线程控制台聊天室相关的知识,希望对你有一定的参考价值。
package tf thread;
import java io BufferedReader;
import java io IOException;
import java io InputStreamReader;
import java io PrintWriter;
import ServerSocket;
import Socket;
import java util ArrayList;
import java util List;
import ncurrent ExecutorService;
import ncurrent Executors;
public class ChatServer
private static final int PORT = ; // 端口号
private static List<Socket> list = new ArrayList<Socket>(); // 保存连接对象
private ExecutorService exec;
private ServerSocket server;
public static void main(String[] args)
new ChatServer();
public ChatServer()
try
server = new ServerSocket(PORT);
exec = Executors newCachedThreadPool();
System out println( 服务器已启动! );
Socket client = null;
while (true)
client = server accept(); // 接收客户连接
list add(client);
exec execute(new ChatTask(client));
catch (IOException e)
e printStackTrace();
static class ChatTask implements Runnable
private Socket socket;
private BufferedReader br;
private PrintWriter pw;
private String msg;
public ChatTask(Socket socket) throws IOException
this socket = socket;
br = new BufferedReader(new InputStreamReader(socket
getInputStream()));
msg = 【 + this socket getInetAddress() + 】进入聊天室!当前聊天室有【
+ list size() + 】人 ;
sendMessage();
public void run()
try
while ((msg = br readLine()) != null)
if (msg trim() equals( bye ))
list remove(socket);
br close();
pw close();
msg = 【 + socket getInetAddress() + 】离开聊天室!当前聊天室有【
+ list size() + 】人 ;
socket close();
sendMessage();
break;
else
msg = 【 + socket getInetAddress() + 】说 + msg;
sendMessage();
catch (IOException e)
e printStackTrace();
/**
* 群发消息给聊天室的所有人
*/
private void sendMessage() throws IOException
System out println(msg);
for (Socket client : list)
pw = new PrintWriter(client getOutputStream() true);
pw println(msg);
package tf thread;
import java io BufferedReader;
import java io InputStreamReader;
import java io PrintWriter;
import Socket;
import ncurrent ExecutorService;
import ncurrent Executors;
public class ChatClient
private static final int PORT = ;
private static ExecutorService exec = Executors newCachedThreadPool();
public static void main(String[] args) throws Exception
new ChatClient();
public ChatClient()
try
Socket socket = new Socket( PORT);
exec execute(new Sender(socket));
System out
println( 【 + socket getInetAddress() + 】您好 欢迎来到阿飞聊天室! );
BufferedReader br = new BufferedReader(new InputStreamReader(socket
getInputStream()));
String msg;
while ((msg = br readLine()) != null)
System out println(msg);
catch (Exception e)
/**
* 客户端线程获取控制台输入消息
*/
static class Sender implements Runnable
private Socket socket;
public Sender(Socket socket)
this socket = socket;
public void run()
try
BufferedReader br = new BufferedReader(new InputStreamReader(
System in));
PrintWriter pw = new PrintWriter(socket getOutputStream() true);
String msg;
while (true)
msg = br readLine();
pw println(msg);
if (msg trim() equals( bye ))
pw close();
br close();
exec shutdownNow();
break;
catch (Exception e)
e printStackTrace();
cha138/Article/program/Java/gj/201311/27478
相关参考