Java 聊天室功能实现代码示例
以下是一个简单的 Java 代码实现聊天室功能的範例:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println('Server is running...');
while (true) {
Socket socket = serverSocket.accept();
System.out.println('New client connected: ' + socket);
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
Thread thread = new ClientHandler(socket, in, out);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ClientHandler extends Thread {
Socket socket;
DataInputStream in;
DataOutputStream out;
public ClientHandler(Socket socket, DataInputStream in, DataOutputStream out) {
this.socket = socket;
this.in = in;
this.out = out;
}
@Override
public void run() {
try {
while (true) {
String message = in.readUTF();
System.out.println('Received message from ' + socket + ': ' + message);
for (ClientHandler client : Server.clients) {
if (client != this) {
client.out.writeUTF(message);
}
}
}
} catch (IOException e) {
System.out.println('Client ' + socket + ' disconnected');
Server.clients.remove(this);
}
}
}
class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket('localhost', 9999);
System.out.println('Connected to server: ' + socket);
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
Thread thread = new ServerHandler(in);
thread.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String message = reader.readLine();
out.writeUTF(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ServerHandler extends Thread {
DataInputStream in;
public ServerHandler(DataInputStream in) {
this.in = in;
}
@Override
public void run() {
try {
while (true) {
String message = in.readUTF();
System.out.println('Received message from server: ' + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
此範例中,Server類負責啟動服務器並接受客戶端連接,並為每個客戶端啟動一個線程(ClientHandler)來處理客戶端發送的消息。ClientHandler類中,當收到客戶端發送的消息時,會將消息發送給所有其他客戶端。Client類則負責連接到服務器並發送消息。ServerHandler類則負責接收服務器發送的消息並輸出到控制台上。
原文地址: https://www.cveoy.top/t/topic/nZrC 著作权归作者所有。请勿转载和采集!