Java服务器将绘制的线条发送给多个客户端,实时同步线条数据,客户端不需要有其他功能的代码
时间: 2024-03-24 13:38:02 浏览: 54
以下是一个简单的示例代码,演示如何在Java中将服务器绘制的线条发送给多个客户端,实现实时同步线条数据,客户端不需要有其他功能:
服务器端代码:
```java
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
// 保存所有已连接的客户端Socket对象
private static List<Socket> clients = new ArrayList<>();
public static void main(String[] args) {
try {
// 创建ServerSocket对象,监听客户端的连接
ServerSocket server = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
// 等待客户端连接
Socket socket = server.accept();
System.out.println("客户端已连接,IP地址为:" + socket.getInetAddress().getHostAddress());
// 将新连接的客户端Socket对象保存到列表中
clients.add(socket);
// 创建线条对象,并绘制线条
Line line = new Line(10, 10, 100, 100, "red", 2);
line.draw();
// 将线条对象序列化为字节数组
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(line);
byte[] data = baos.toByteArray();
// 发送线条数据给所有客户端
for (Socket client : clients) {
OutputStream os = client.getOutputStream();
os.write(data);
os.flush();
}
// 关闭流和Socket对象
oos.close();
baos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 线条类
class Line implements Serializable {
private static final long serialVersionUID = 1L;
private int startX;
private int startY;
private int endX;
private int endY;
private String color;
private int thickness;
public Line(int startX, int startY, int endX, int endY, String color, int thickness) {
this.startX = startX;
this.startY = startY;
this.endX = endX;
this.endY = endY;
this.color = color;
this.thickness = thickness;
}
public void draw() {
System.out.println("绘制线条:起点(" + startX + "," + startY + "),终点(" + endX + "," + endY + "),颜色:" + color + ",粗细:" + thickness);
}
}
```
客户端代码:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 连接服务器
Socket socket = new Socket("localhost", 8888);
System.out.println("连接服务器成功...");
while (true) {
// 接收线条数据
InputStream is = socket.getInputStream();
byte[] data = new byte[1024];
int len = is.read(data);
ByteArrayInputStream bais = new ByteArrayInputStream(data, 0, len);
ObjectInputStream ois = new ObjectInputStream(bais);
Line line = (Line) ois.readObject();
// 绘制线条
line.draw();
// 关闭流
ois.close();
bais.close();
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在这个示例中,服务器端创建了一个Line对象,并绘制出一条线条。然后将线条对象序列化为字节数组,并通过Socket发送给所有已连接的客户端。客户端接收线条数据,将字节数组反序列化成Line对象,并绘制出一条线条。
需要注意的是,这个示例只演示了如何将线条数据从服务器端实时同步到多个客户端,并在客户端绘制出线条。实际应用中,可能需要考虑如何处理客户端断开连接的情况,以及如何实现客户端之间的实时通信等问题。
阅读全文