通过套接字连接发送多个命令的问题

Issue with sending multiple commands over a socket connection

我正在尝试发送命令并让它通过套接字连接执行。我需要阅读每个响应行,然后继续向同一个进程发送命令。下面我有处理该问题的方法。

目前,我在最初打开套接字连接时收到响应,但之后,程序挂起,直到外部主机关闭连接,大概是因为在指定的时间内没有输入输入。

public static void main(String[] args) {

        try {
            sendSmtpTest("anEmail@aRandomDomain");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
   public static boolean sendSmtpTest(String address) throws Exception {

        Socket socket = new Socket("a.random.address", 0000);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter out =  new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

        int res;
        System.out.println("1");
        System.out.println(in.readLine());

        System.out.println("2");
        System.out.println(in.readLine());
        say(out, "HELO netatlantic.com");

        System.out.println("3");
        System.out.println(in.readLine());

        System.out.println("4");
        System.out.println(in.readLine());
        say(out, "MAIL FROM: <abuse@netatlantic.com>");

        System.out.println("5");
        System.out.println(in.readLine());
        say(out, "RCTP TO: <" + address + ">");

        System.out.println("6");
        System.out.println(in.readLine());
        say(out, "RSET");

        System.out.println("7");
        say(out, "QUIT");

        // clean up
        in.close();
        in.close();
        out.close();

        return true;

    }
   private static void say(BufferedWriter wr, String text) throws IOException {
        wr.write((text + "\r\n"));
        wr.newLine();
        wr.flush();

    }

随机打印数字是让我知道它在程序中的位置的一种方式。此外,我必须 运行 从服务器关闭它,因此我不能在调试器中 运行 它,因为我连接到的套接字只接受来自特定地址的连接。 谢谢!

您的意思是您看到 SMTP 服务器打印出 220 状态,但它只是挂起?

那是因为您正在等待服务器发送另一行,但它正在等待您的 HELO 命令。 (就在您的“2”语句之后。)删除多余的 System.out.println(in.readLine()); 并查看您是否取得进展。

如果没有,post 程序的输出,以便您的问题更容易理解。