2012-10-24 63 views
3

我想實現JSch從遠程Windows sftp服務器到Linux檢索文件。當使用JSch執行SFTP時無法連接到安全通道

Session session = null; 
    Channel channel = null; 
    ChannelSftp channelSftp = null; 
     try{ 
      JSch jsch = new JSch(); 
      session = jsch.getSession("userName","hostName",22); 
      session.setPassword("password"); 
      java.util.Properties config = new java.util.Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      session.setConfig(config); 
      session.connect(); 
      System.out.println(session.sendKeepAliveMsg()); 
      channel = session.openChannel("sftp"); 
      channel.connect(); 
     }catch(Exception e){ 
       e.printstacktrace(); 
     } 

我在運行此代碼時遇到以下異常。

com.jcraft.jsch.JSchException: java.io.IOException: inputstream is closed 
    at com.jcraft.jsch.ChannelSftp.start(ChannelSftp.java:288) 
    at com.jcraft.jsch.Channel.connect(Channel.java:152) 

當我調試,我發現:

start(); 

方法通道類被拋出異常。無論如何,我可以防止這種情況發生嗎?我不明白爲什麼這個方法在那裏沒有做任何事情。

回答

2

嘗試投你的通道進入ChannelSft前連接:

Channel channel = session.openChannel("sftp"); 
ChannelSftp channelSftp = (ChannelSftp) channel; 
channelSftp.connect(); 
+0

嘿我道歉,將其標記爲固定的......我固定它很久以前..感謝您的回答雖然 – mdp

+0

無問題;)! – Maxbester

+0

我得到了同樣的問題。我從兩方面進行調查; 1.與發生異常一樣,同時我發現我的應用程序發送了帶有Reset平面設置的TCP數據包(這可能表示會話中存在一些問題)2.我的應用程序與上述症狀完全相同。我懷疑在異常堆棧跟蹤方面,最終調用了ChannelSftp的start()方法,那麼在調用connect()方法之前將通道對象轉換爲ChannelSftp的確切原因是什麼。感謝你們提供任何提示 –

相關問題