package moreChat;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.*;
public class ChatClient
{
private static final int PORT = 8888;
private static ExecutorService exec = Executors.newCachedThreadPool();
public ChatClient()
{
try
{
Socket socket = new Socket("localhost", 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)
{
e.printStackTrace();
}
}
/**
* 客户端线程获取控制台输入消息
*/
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();
}
}
}
public static void main(String[] args) throws Exception
{
new ChatClient();
}
}

 

package moreChat;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;
public class ChatServer
{
private static final int PORT = 8888; // 端口号
private static List<Socket> list = new ArrayList<Socket>(); // 保存连接对象
private ExecutorService exec;
private ServerSocket server;
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);
}
}
}

public static void main(String[] args)
{
new ChatServer();
}

}