有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java TCP服务器未关闭电脑

我编写了一个Java TCP服务器程序,从客户端关闭我的电脑。它正在成功接收来自客户端的消息,但没有关闭电脑 谁来帮我修一下这个

这是我的代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSideSocket {

    private static ServerSocket serverSocket;
    private static Socket clientSocket;
    private static InputStreamReader inputStreamReader;
    private static BufferedReader bufferedReader;
    private static String message;

    public static void main(String[] args) {

        try {
            serverSocket = new ServerSocket(4020);  //Server socket

        } catch (IOException e) {
            System.out.println("Could not listen on port: 4020");
        }

        System.out.println("Server started. Listening to the port 4020");

        while (true) {
            try {

                clientSocket = serverSocket.accept();   //accept the client connection
                inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
                bufferedReader = new BufferedReader(inputStreamReader); //get the client message
                message = bufferedReader.readLine();
 if(message=="shutdown"){

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("shutdown -s -t ");
System.exit(0);

 }
 else if(message=="restart"){
Runtime runtime1 = Runtime.getRuntime();
Process proc2 = runtime1.exec("shutdown -r -t ");
System.exit(0);


 }

                System.out.println(message);
                inputStreamReader.close();
                clientSocket.close();

            } catch (IOException ex) {
                System.out.println("Problem in message reading");
            }
        }

    }
}

共 (3) 个答案

  1. # 1 楼答案

    编辑代码:

     import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerSideSocket {
    
        private static ServerSocket serverSocket;
        private static Socket clientSocket;
        private static InputStreamReader inputStreamReader;
        private static BufferedReader bufferedReader;
        private static String message;
    
        public static void main(String[] args) {
    
            try {
                serverSocket = new ServerSocket(4020);  //Server socket
    
            } catch (IOException e) {
                System.out.println("Could not listen on port: 4020");
            }
    
            System.out.println("Server started. Listening to the port 4020");
    
            while (true) {
                try {
    
                    clientSocket = serverSocket.accept();   //accept the client connection
                    inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
                    bufferedReader = new BufferedReader(inputStreamReader); //get the client message
                    message = bufferedReader.readLine();
     if(message.equals("shutdown")){
    
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 60");
    System.exit(0);
    
     }
     else if(message.equals("restart")){
    Runtime runtime1 = Runtime.getRuntime();
    Process proc2 = runtime1.exec("shutdown -r -t 60");
    System.exit(0);
    
    
     }
    
                    System.out.println(message);
                    inputStreamReader.close();
                    clientSocket.close();
    
                } catch (IOException ex) {
                    System.out.println("Problem in message reading");
                }
            }
    
        }
    }
    

    在上面的代码中,我更改了要执行的命令,在这里您需要指定关闭的时间,同时还需要像上面一样比较需要遵循的字符串

  2. # 2 楼答案

    尝试sudo poweroff并从进程中读取输出/错误,这样您就知道出了什么问题

    您还需要使用^{}而不是==来比较字符串

    顺便说一句,如果您只想远程关机,您可以像这样使用SSH

    ssh host-to-shitdown sudo poweroff
    

    这更安全,您不需要编写任何Java代码

  3. # 3 楼答案

    参数-t关机需要一个数字(等待关机/重启的秒数)