客户端线程
import java.io.DataInputStream;
import java.io.IOException;
public class ClientMessageReceiver implements Runnable {
private DataInputStream dis;
private boolean timeToStop = false;
public ClientMessageReceiver(DataInputStream dis) {
this.dis = dis;
}
@Override
public void run() {
while (!timeToStop) {
try {
System.out.println(dis.readUTF());
} catch (IOException e) {
if ("Connection reset".equals(e.getMessage())) {
System.out.println("与服务器的连接已中断!");
break;
}
if (!timeToStop) {
e.printStackTrace();
}
}
}
}
public void stop() {
timeToStop = true;
}
}
服务器端程序
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class ChatServer {
public static final String EXIT = "exit";
public static final int PORT = 8888;
static Map<String, Socket> nickNameSocketMap = new HashMap<>();
public static void main(String[] args) {
try (ServerSocket ss = new ServerSocket(PORT)) {
System.out.println("聊天室服务器端已启动,正在监听" + PORT + "端口");
while (true) {
try {
Socket socket = ss.accept();
System.out.println("有新用户连接到服务器端,信息为:" + socket);
new Thread(new ChatServerRunnable(socket)).start();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端程序
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class ChatClient {
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
try (Socket socket = new Socket("127.0.0.1", 8888);
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream())) {
ClientMessageReceiver messageReceiver = new ClientMessageReceiver(dis);
new Thread(messageReceiver).start();
String input = null;
do {
input = scanner.nextLine();
write(dos, input);
} while (!ChatServer.EXIT.equals(input));
messageReceiver.stop();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void write(DataOutputStream dos, String message) throws IOException {
dos.writeUTF(message);
dos.flush();
}
}
运行说明
启动服务器:

启动第一个客户端,输入客户昵称:

服务器监听到了这个事件:










