我正在尝试发送命令并让它通过套接字连接执行。我需要读取每个响应行,然后继续向同一进程发送命令。下面我有处理它的方法。
目前,我在最初打开套接字连接时收到响应,但之后,程序会挂起,直到外部主机关闭连接,可能是因为在指定的时间内没有输入任何输入。
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();
}
随机打印数字是我了解程序所在位置的一种方式。此外,我必须从服务器运行它,因此我无法在调试器中运行它,因为我连接的套接字只接受来自特定地址的连接。 谢谢!
答案 0 :(得分:0)
您的意思是您看到SMTP服务器的220状态打印出来,但它只是挂起?
那是因为你正在等待从服务器发送另一行,但它正在等待你的HELO命令。 (在“2”语句之后。)删除额外的System.out.println(in.readLine());
,看看你是否取得了进展。
如果没有,请发布程序的输出,以便您的问题更容易理解。