2010-10-07 42 views
0

我這個代碼掙扎:如何使用Smack發送文件?

FileTransferManager manager = new FileTransferManager(connection) 

OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("[email protected]/Smack"); 


try { 
    System.out.println("000"); 
    transfer.sendFile(new File("D:/cow.wav"), "Moo !"); 
    System.out.println("111"); 

    while(!transfer.isDone()) { 
    System.out.println(transfer.getProgress() + " is done!");  
    //System.out.println(transfer.getStreamID() + " is done!"); 

    try { 
     Thread.sleep(1000); 
    } 
    catch (InterruptedException e) { 
     // TODO Auto-generated catch block e.printStackTrace(); 
    } 
    } 
} 
catch (XMPPException e) { 
    // TODO Auto-generated catch block e.printStackTrace(); 
} 

它接縫,它不能發送文件。

任何人都可以幫我解決這個問題嗎?

回答

2

我相信Gmail(根據您的代碼判斷)不支持文件傳輸。見this。您也可以發送disco#itemdisco#info以查看它是否支持任何種類的字節流代理。但是一些服務器如jabber.org不會在代理上返回任何disco#info

對於查詢XMPP服務,請參閱我的blog

0

您尚未輸入收件人的完整ID。使用

myRoster.getRoster().getPresence(entry).getFrom() 

找回它,然後,使轉移,並確保recieiver是使用XMPP的一個,也因爲它的文件傳輸是XMPP不同的不使用,每增加。

0

我們發現SMACK往往會在登錄後添加「/ smack」應用說明符。如果你使用上述技巧,你應該看到這種情況發生。奇怪的是,這不會影響消息,但確實會影響文件傳輸