socket聊天室建立群组,客户端能够向组内成员发送消息,未在组内不能收到 java代码
时间: 2023-08-21 20:02:39 浏览: 36
以下是一个基于 Java 的简单的 socket 聊天室建立群组的示例代码:
Server 端:
```java
import java.net.*;
import java.io.*;
public class Server {
// 定义群组名称和群组成员列表
private static final String GROUP_NAME = "Awesome Group";
private static final List<Socket> GROUP_MEMBERS = new ArrayList<>();
public static void main(String[] args) throws IOException {
// 启动服务端
ServerSocket server = new ServerSocket(5555);
System.out.println("Server started.");
// 循环处理客户端连接请求
while (true) {
Socket client = server.accept();
System.out.println("Client connected: " + client);
// 处理客户端连接请求
Thread thread = new Thread(() -> {
try {
// 客户端连接成功,欢迎信息
OutputStream output = client.getOutputStream();
output.write(("Welcome to " + GROUP_NAME + "! You are now connected.\n").getBytes());
// 加入群组
GROUP_MEMBERS.add(client);
// 循环处理客户端消息
while (true) {
InputStream input = client.getInputStream();
byte[] buffer = new byte[1024];
int length = input.read(buffer);
// 如果收到“quit”消息,退出并关闭连接
String message = new String(buffer, 0, length);
if (message.trim().equals("quit")) {
output.write("You are now disconnected.\n".getBytes());
client.close();
GROUP_MEMBERS.remove(client);
break;
}
// 向群组内所有成员发送消息
for (Socket member : GROUP_MEMBERS) {
if (member != client) {
OutputStream memberOutput = member.getOutputStream();
memberOutput.write((client.getInetAddress().getHostAddress() + ": " + message).getBytes());
}
}
}
} catch (IOException e) {
System.err.println("Error handling client: " + e.getMessage());
}
});
thread.start();
}
}
}
```
Client 端:
```java
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws IOException {
// 定义客户端名称
String name = "";
// 获取客户端名称
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
name = reader.readLine();
// 连接服务端
Socket server = new Socket("localhost", 5555);
System.out.println("Connected to server.");
// 接收服务端欢迎信息
InputStream input = server.getInputStream();
byte[] buffer = new byte[1024];
int length = input.read(buffer);
String message = new String(buffer, 0, length);
System.out.print(message);
// 循环处理客户端消息
while (true) {
// 发送消息
OutputStream output = server.getOutputStream();
String inputMessage = reader.readLine();
output.write(inputMessage.getBytes());
// 如果发送“quit”消息,退出并关闭连接
if (inputMessage.trim().equals("quit")) {
server.close();
break;
}
// 接收服务端消息
length = input.read(buffer);
message = new String(buffer, 0, length);
System.out.print(message);
}
}
}
```
该示例代码仅供参考,实际应用中可能需要进行更多的安全性和错误处理。