编写代码,要求用Java语言设计基于socket的网络聊天,要实现客户端与客户端单独聊天的功能,还要实现客户端群聊的功能,对于每行代码写上注释。
时间: 2024-04-09 14:27:43 浏览: 6
当然可以!以下是一个基于Java语言设计的基于socket的网络聊天的示例代码,实现了客户端与客户端单独聊天和客户端群聊的功能。每行代码都有注释解释其作用。
Server.java:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
private static final int PORT = 8888;
private static List<Socket> clientSockets = new ArrayList<>();
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
System.out.println("等待客户端连接...");
Socket clientSocket = serverSocket.accept();
clientSockets.add(clientSocket);
System.out.println("客户端连接成功!");
// 创建新线程处理客户端消息
Thread clientThread = new Thread(new ClientHandler(clientSocket));
clientThread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 处理客户端消息的线程
private static class ClientHandler implements Runnable {
private Socket clientSocket;
private BufferedReader reader;
private PrintWriter writer;
public ClientHandler(Socket clientSocket) throws IOException {
this.clientSocket = clientSocket;
reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
writer = new PrintWriter(clientSocket.getOutputStream(), true);
}
@Override
public void run() {
try {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("收到客户端消息: " + message);
broadcast(message); // 广播消息给所有客户端
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
clientSocket.close();
clientSockets.remove(clientSocket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 广播消息给所有客户端
private void broadcast(String message) {
for (Socket socket : clientSockets) {
try {
PrintWriter socketWriter = new PrintWriter(socket.getOutputStream(), true);
socketWriter.println(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
```
Client.java:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
private static final String SERVER_IP = "localhost";
private static final int SERVER_PORT = 8888;
public static void main(String[] args) {
try {
Socket serverSocket = new Socket(SERVER_IP, SERVER_PORT);
BufferedReader reader = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
PrintWriter writer = new PrintWriter(serverSocket.getOutputStream(), true);
// 创建新线程接收服务器消息
Thread receiveThread = new Thread(() -> {
try {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("收到服务器消息: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
});
receiveThread.start();
// 主线程发送消息给服务器
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String message;
while ((message = consoleReader.readLine()) != null) {
writer.println(message);
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这是一个简单的基于socket的网络聊天示例,使用了Java的Socket类进行通信。Server.java是服务器端代码,Client.java是客户端代码。服务器端监听客户端连接,并创建新线程处理每个客户端的消息。客户端连接服务器后,一个线程用于接收服务器消息,主线程用于读取用户输入并发送给服务器。
请注意,此示例只是一个简单的示例,没有考虑到错误处理、异常情况等。在实际应用中,需要更加完善和健壮的代码来处理各种情况。