Java创建两个类 ChatClient ChatServer 实现接收信息发出信息,实现双向通信
时间: 2024-02-19 14:58:35 浏览: 22
好的,下面是Java实现的ChatClient和ChatServer类,实现双向通信:
ChatClient类:
```java
import java.io.*;
import java.net.*;
public class ChatClient {
private Socket socket;
private BufferedReader reader;
private PrintWriter writer;
public ChatClient(String host, int port) throws IOException {
socket = new Socket(host, port);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
}
public void sendMessage(String message) {
writer.println(message);
}
public String receiveMessage() throws IOException {
return reader.readLine();
}
public void closeConnection() throws IOException {
socket.close();
}
}
```
ChatServer类:
```java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private ServerSocket serverSocket;
private List<ChatClientConnection> clients;
public ChatServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
clients = new ArrayList<ChatClientConnection>();
}
public void run() throws IOException {
while (true) {
Socket socket = serverSocket.accept();
ChatClientConnection client = new ChatClientConnection(socket, this);
clients.add(client);
client.start();
}
}
public void broadcast(String message, ChatClientConnection sender) {
for (ChatClientConnection client : clients) {
if (client != sender) {
client.sendMessage(message);
}
}
}
public void removeClient(ChatClientConnection client) {
clients.remove(client);
}
}
class ChatClientConnection extends Thread {
private Socket socket;
private BufferedReader reader;
private PrintWriter writer;
private ChatServer server;
public ChatClientConnection(Socket socket, ChatServer server) throws IOException {
this.socket = socket;
this.server = server;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
}
public void run() {
try {
while (true) {
String message = reader.readLine();
if (message == null) {
server.removeClient(this);
break;
}
server.broadcast(message, this);
}
} catch (IOException e) {
server.removeClient(this);
} finally {
try {
socket.close();
} catch (IOException e) {
// ignore
}
}
}
public void sendMessage(String message) {
writer.println(message);
}
}
```
在这个示例中,我们使用Java的Socket和Thread类来实现ChatClient和ChatServer类。
ChatServer类使用一个while循环来监听连接,当有新的客户端连接时,它会创建一个新的线程(ChatClientConnection),然后添加到客户端列表中。ChatClientConnection类用于处理每个客户端的连接,它使用BufferedReader和PrintWriter类来实现消息的接收和发送,并使用broadcast函数将消息发送给所有连接的客户端。
最后,我们可以使用以下代码来启动ChatServer并连接ChatClient:
```java
ChatServer server = new ChatServer(8000);
server.run();
ChatClient client = new ChatClient("localhost", 8000);
client.sendMessage("Hello, World!");
String message = client.receiveMessage();
System.out.println(message);
client.closeConnection();
```
希望这个示例可以帮助您理解如何实现一个简单的聊天应用程序。