java实现:系统至少包含5个设备,设备与服务器之间采用TCP/IP协议通信,协议格 式(id 当前时间 电量百分比 位置x 位置y)使用Socket编程实现
时间: 2024-04-09 16:29:18 浏览: 7
以下是一个简单的Java示例代码,演示了如何使用Socket编程实现设备和服务器之间的TCP/IP通信,并按照指定的协议格式进行数据传输。
设备端代码:
```java
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Date;
public class Device {
public static void main(String[] args) {
String serverHost = "服务器IP地址";
int serverPort = 12345;
try {
// 创建Socket并连接到服务器
Socket socket = new Socket(serverHost, serverPort);
System.out.println("连接到服务器成功!");
// 获取与服务器通信的输出流
OutputStream outputStream = socket.getOutputStream();
// 模拟发送设备信息
String deviceId = "设备ID";
String currentTime = new Date().toString();
int batteryPercentage = 80;
int positionX = 100;
int positionY = 200;
// 构造数据包并发送
String dataPacket = deviceId + " " + currentTime + " " + batteryPercentage + " " + positionX + " " + positionY;
outputStream.write(dataPacket.getBytes());
outputStream.flush();
System.out.println("设备信息发送成功!");
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
服务器端代码:
```java
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
int serverPort = 12345;
try {
// 创建ServerSocket并监听指定端口
ServerSocket serverSocket = new ServerSocket(serverPort);
System.out.println("服务器启动成功,等待设备连接...");
while (true) {
// 接受设备连接请求
Socket socket = serverSocket.accept();
System.out.println("设备连接成功!");
// 获取与设备通信的输入流
InputStream inputStream = socket.getInputStream();
// 读取设备发送的数据
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String dataPacket = new String(buffer, 0, length);
System.out.println("接收到设备信息:" + dataPacket);
// 解析数据包
String[] deviceInfo = dataPacket.split(" ");
String deviceId = deviceInfo[0];
String currentTime = deviceInfo[1];
int batteryPercentage = Integer.parseInt(deviceInfo[2]);
int positionX = Integer.parseInt(deviceInfo[3]);
int positionY = Integer.parseInt(deviceInfo[4]);
// TODO: 根据需要进行相应的处理
// 关闭连接
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
请注意,以上示例代码只是简单演示了设备和服务器之间的通信,实际应用中可能需要添加错误处理、多线程支持等功能。另外,还需要根据具体需求进行数据解析和处理。