2012-05-07 126 views
0

我想通過塊讀本地storgae的視頻文件並上傳到服務器。我有這個代碼在另一個Java平臺上工作,所以我認爲它會很簡單。爲什麼FileInputStream關閉

當我嘗試使用

File f = new File(filePath); 
fileIn = new FileInputStream(f); 

它打開,我可以什麼讀什麼我從文件的需要,在我的代碼進一步下跌,雖然我打電話

SocketFactory socketFactory = SSLSocketFactory.getDefault(); 
    Socket socket = socketFactory.createSocket(url, 443); 

    _in = new InputStreamReader(socket.getInputStream()); 
    _out = (OutputStream)socket.getOutputStream(); 

的插座連接到打開文件好,但是當我在讀取這段代碼之後讀取FileInputStream時,我得到流關閉異常。

任何想法?我沒有看到日誌中的任何內容顯示任何失敗,但是我無法從fileinputstream讀取一旦我已經認識到服務器?

讓我知道你是否需要知道任何其他的幫助。

+1

你還在讀什麼? – npinti

+0

這正是你的代碼?是否有任何try/catch塊? – nsfyn55

+1

請加上閱讀代碼.. – Ronnie

回答

-1

你沒有調用socket.startHandshake();

+0

startHandshake似乎沒有提供給Socket類,我正在閱讀使用.. byte [] bit = new byte [bufSize - firstTotal.length]; int n = fileIn.read(bit); – user1379811

+0

-1。 ''startHandshake()'不可能解決任何意外關閉'FileInputStream'的問題,而且您根本不需要調用它:當您在SSLSocket上執行第一個I/O時,會自動調用它。 – EJP

1

這個例子爲我工作:

public class MainClass { 
    public static void main(String[] args) { 
    String host = args[0]; 
    int port = Integer.parseInt(args[1]); 

    try { 
     System.out.println("Locating socket factory for SSL..."); 
     SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 

     System.out.println("Creating secure socket to " + host + ":" + port); 
     SSLSocket socket = (SSLSocket) factory.createSocket(host, port); 

     System.out.println("Enabling all available cipher suites..."); 
     String[] suites = socket.getSupportedCipherSuites(); 
     socket.setEnabledCipherSuites(suites); 

     System.out.println("Registering a handshake listener..."); 
     socket.addHandshakeCompletedListener(new MyHandshakeListener()); 

     System.out.println("Starting handshaking..."); 
     socket.startHandshake(); 

     System.out.println("Just connected to " + socket.getRemoteSocketAddress()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

class MyHandshakeListener implements HandshakeCompletedListener { 
    public void handshakeCompleted(HandshakeCompletedEvent e) { 
    System.out.println("Handshake succesful!"); 
    System.out.println("Using cipher suite: " + e.getCipherSuite()); 
    } 
} 



作爲snicolas說,socket.startHandshake()可以解決您的概率。

+0

感謝你們這麼快,讓我看看信息在哪裏讓我和生病讓你知道盡快。 – user1379811