只贴出加业务逻辑前的内容
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
// 定义结构体用于表示消息
class Message {
public MessageType Type; // 消息类型
public String Content; // 消息内容
public byte[] FileData; // 文件数据
}
// 定义消息类型的枚举
enum MessageType {
Text,
File
}
public class Main {
private static boolean isRunning;
private static BufferedWriter writer;
public static void main(String[] args) {
int serverPort = 8000;
try {
// 创建服务器套接字并开始监听指定端口
ServerSocket serverSocket = new ServerSocket(serverPort);
System.out.println("服务端已启动,等待连接...");
isRunning = true;
// 接受客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接.");
// 创建输出流发送消息
writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
// 启动接收消息的线程
Thread receiveThread = new Thread(() -> {
try {
// 创建输入流读取客户端消息
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while (isRunning) {
// 读取客户端发送的消息
String json = reader.readLine();
if (json != null) {
// 解析JSON消息
Gson gson = new Gson();
Message message = gson.fromJson(json, Message.class);
// 处理消息
switch (message.Type) {
case Text:
System.out.println("接收到文本消息:" + message.Content);
break;
case File:
// 处理文件消息
handleFileMessage(message);
break;
default:
// 未知消息类型,忽略接收
break;
}
}
}
// 关闭连接
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
});
receiveThread.start();
// 发送消息示例
sendMessage("这是一个文本消息", MessageType.Text);
sendFileMessage("文件路径");
// 等待控制台输入,停止服务器
System.in.read();
isRunning = false;
// 关闭服务器套接字
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void sendMessage(String content, MessageType type) {
// 创建消息对象
Message message = new Message();
message.Type = type;
message.Content = content;
// 将消息序列化为JSON字符串
Gson gson = new GsonBuilder().create();
String json = gson.toJson(message);
// 发送消息
sendStringMessage(json);
}
private static void sendFileMessage(String filePath) {
try {
// 读取文件数据
File file = new File(filePath);
byte[] fileData = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(fileData);
fis.close();
// 创建消息对象
Message message = new Message();
message.Type = MessageType.File;
message.Content = "这是一个文件消息";
message.FileData = fileData;
// 将消息序列化为JSON字符串
Gson gson = new GsonBuilder().create();
String json = gson.toJson(message);
// 发送消息
sendStringMessage(json);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void sendStringMessage(String message) {
try {
// 发送消息
writer.write(message);
writer.newLine();
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void handleFileMessage(Message message) {
// 处理文件数据,例如保存文件到本地
try {
File file = new File("保存文件路径");
FileOutputStream fos = new FileOutputStream(file);
fos.write(message.FileData);
fos.close();
System.out.println("接收到文件消息,保存文件成功:" + file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
只为记录而已