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

时间:2015-06-24 19:36:23

标签: java sockets bufferedreader bufferedwriter

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

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

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();

    }

随机打印数字是我了解程序所在位置的一种方式。此外,我必须从服务器运行它,因此我无法在调试器中运行它,因为我连接的套接字只接受来自特定地址的连接。 谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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