2015-06-24 152 views
0

我試圖發送一個命令,並通過套接字連接執行它。我需要閱讀每條響應行,然後繼續向相同的進程發送命令。下面我有處理的方法。通過套接字連接發送多個命令的問題

當前,我最初打開套接字連接時收到一個響應,但之後程序一直掛起,直到外部主機關閉連接,大概是因爲在指定的時間內未輸入任何輸入。

public static void main(String[] args) { 

     try { 
      sendSmtpTest("[email protected]"); 
     } 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: <[email protected]>"); 

     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

您可以運行遠程調試器。 – erickson

回答

0

你的意思是說你看到SMTP服務器的220狀態打印出來,但它只是掛起?

這是因爲您正在等待從服務器發送另一行,但它正在等待您的HELO命令。 (就在您的「2」聲明之後。)刪除額外的System.out.println(in.readLine());並查看您是否取得了進展。

如果不是,請從您的程序發佈輸出,以便您的問題更易於理解。

+0

真棒,工作!我試了幾個小時,然後發佈了不同的方法。我會盡快接受你的回答。謝謝! – Colby