编辑代码

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.security.Key;
public class TCPServer {
    private static final int PORT = 8888;
    private static final String ALGORITHM = "DES";
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(PORT);
            System.out.println("Server started, waiting for client to connect...");
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("Client connected: " + socket.getInetAddress());
                Thread thread = new Thread(new Handler(socket));
                thread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static class Handler implements Runnable {
        private final Socket socket;
        public Handler(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            try {
                InputStream inputStream = socket.getInputStream();
                OutputStream outputStream = socket.getOutputStream();
                SecretKey secretKey = generateSecretKey();
                Cipher cipher = Cipher.getInstance(ALGORITHM);
                cipher.init(Cipher.DECRYPT_MODE, secretKey);
                byte[] buffer = new byte[1024];
                int length;
                while ((length = inputStream.read(buffer)) > 0) {
                    byte[] decryptedBytes = cipher.doFinal(buffer, 0, length);
                    String message = new String(decryptedBytes, StandardCharsets.UTF_8);
                    System.out.println("[Receive]: " + message);
                    if ("exit".equals(message.trim())) {
                        break;
                    }
                }
                inputStream.close();
                outputStream.close();
                socket.close();
                System.out.println("Client disconnected: " + socket.getInetAddress());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        private SecretKey generateSecretKey() throws Exception {
            KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
            keyGenerator.init(56);
            return keyGenerator.generateKey();
        }
    }
}