1.
Code:
Server:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class chatServer401 {
public static void main(String[] args) {
final int port = 5678;
try {
//tao server socket
ServerSocket ss = new ServerSocket(port);
[Link]("Socket da duoc tao tai cong: " + port);
//chap nhan ket noi tu client
Socket s = [Link]();
[Link]("Client da ket noi. BAT DAU!");
//tao doi tuong de doc du lieu tu client
InputStream is = [Link]();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader input = new BufferedReader(isr);
//tao doi tuong de gui du lieu den client
OutputStream os = [Link]();
PrintWriter output = new PrintWriter(os, true);
//tao thread de gui tin nhan
Thread sendThread = new Thread(() -> {
BufferedReader consoleInput = new BufferedReader(new InputStreamReader([Link]));
String serverMsg;
try {
while (true) {
serverMsg = [Link]();
if (serverMsg != null) {
[Link](serverMsg);
}
}
} catch (IOException e) {
[Link]();
}
});
[Link]();
//Doc tin nhan tu client
String msg;
while( (msg = [Link]()) != null ){
if ("QUIT".equalsIgnoreCase(msg)){
[Link]("Client dong ket noi");
break;
}
[Link]("Client: " + msg);
}
} catch (IOException e) {
[Link]();
}
}
}
Client:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class chatClient401 {
public static void main(String[] args) {
final String server_address = "localhost";
final int port = 5678;
try (Socket s = new Socket(server_address, port);
PrintWriter output = new PrintWriter([Link](), true);
BufferedReader input = new BufferedReader(new InputStreamReader([Link]));
BufferedReader serverInput = new BufferedReader(new InputStreamReader([Link]())))
{
[Link]("Client ket noi toi server");
// Tạo luồng để đọc tin nhắn từ server
Thread serverReader = new Thread(() -> {
String serverMsg;
try {
while ((serverMsg = [Link]()) != null) {
[Link]("Server: " + serverMsg);
}
} catch (IOException e) {
[Link]("Mat ket noi voi server");
}
});
[Link]();
String msg;
while (true) {
msg = [Link]();
[Link](msg);
if("QUIT".equalsIgnoreCase(msg)){
[Link]("Dong ket noi toi server");
break;
}
}
} catch (IOException e) {
[Link]();
}
}
}
2a.
Code:
Server:
import [Link].*;
import [Link].*;
import [Link].*;
public class chatServer402 {
private static final Map<Socket, PrintWriter> clientOutputs = new HashMap<>();
public static void main(String[] args) {
final int port = 5678;
try (ServerSocket ss = new ServerSocket(port)) {
[Link]("Socket da duoc tao tai cong: " + port);
// Thêm dòng này để bắt đầu thread đọc input từ console
startConsoleInputThread();
while (true) {
Socket clientSocket = [Link]();
[Link]("Client moi da ket noi.");
PrintWriter output = new PrintWriter([Link](), true);
[Link](clientSocket, output);
Thread clientHandler = new Thread(() -> handleClient(clientSocket));
[Link]();
}
} catch (IOException e) {
[Link]();
}
}
private static void handleClient(Socket clientSocket) {
try (BufferedReader input = new BufferedReader(new
InputStreamReader([Link]()))) {
String msg;
int clientIndex = new ArrayList<>([Link]()).indexOf(clientSocket);
while ((msg = [Link]()) != null) {
if ("QUIT".equalsIgnoreCase(msg)) {
[Link]("Client " + clientIndex + " đã đóng kết nối");
break;
}
[Link]("Client " + clientIndex + ": " + msg);
}
} catch (IOException e) {
[Link]();
} finally {
[Link](clientSocket);
try {
[Link]();
} catch (IOException e) {
[Link]();
}
}
}
// Phương thức để gửi tin nhắn riêng cho một client cụ thể
public static void sendPrivateMessage(Socket clientSocket, String message) {
PrintWriter output = [Link](clientSocket);
if (output != null) {
[Link](message);
}
}
// Thread để đọc input từ console và gửi tin nhắn
private static void startConsoleInputThread() {
Thread consoleInputThread = new Thread(() -> {
try (BufferedReader consoleInput = new BufferedReader(new InputStreamReader([Link]))) {
while (true) {
[Link]("Nhap tin nhan (format: <client_index> <message>):");
String input = [Link]();
String[] parts = [Link](" ", 2);
if ([Link] == 2) {
int clientIndex = [Link](parts[0]);
String message = parts[1];
if (clientIndex >= 0 && clientIndex < [Link]()) {
Socket clientSocket = (Socket) [Link]().toArray()[clientIndex];
sendPrivateMessage(clientSocket, message);
[Link]("Da gui tin nhan den client " + clientIndex);
} else {
[Link]("Chi so client khong hop le");
}
} else {
[Link]("Dinh dang khong hop le. Su dung: <client_index> <message>");
}
}
} catch (IOException e) {
[Link]();
}
});
[Link]();
}
}
Client:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class chatClient401 {
public static void main(String[] args) {
final String server_address = "localhost";
final int port = 5678;
try (Socket s = new Socket(server_address, port);
PrintWriter output = new PrintWriter([Link](), true);
BufferedReader input = new BufferedReader(new InputStreamReader([Link]));
BufferedReader serverInput = new BufferedReader(new InputStreamReader([Link]())))
{
[Link]("Client ket noi toi server");
// Tạo luồng để đọc tin nhắn từ server
Thread serverReader = new Thread(() -> {
String serverMsg;
try {
while ((serverMsg = [Link]()) != null) {
[Link]("Server: " + serverMsg);
}
} catch (IOException e) {
[Link]("Mat ket noi voi server");
}
});
[Link]();
String msg;
while (true) {
msg = [Link]();
[Link](msg);
if("QUIT".equalsIgnoreCase(msg)){
[Link]("Dong ket noi toi server");
break;
}
}
} catch (IOException e) {
[Link]();
}
}
}