如何使用Smack发送文件?

时间:2010-10-07 08:35:25

标签: gmail smack

我正在努力解决这段代码:

FileTransferManager manager = new FileTransferManager(connection)

OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("gmailusername@gmail/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(); 
}

它无法发送文件。

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

我相信Gmail(从上面的代码判断)不支持文件传输。见this。您还可以发送disco#itemdisco#info以查看它是否支持任何类型的字节流代理。但是,某些服务器(如jabber.org)不会在代理上返回任何disco#info

要查询XMPP服务,请参阅我的blog

答案 1 :(得分:0)

您尚未输入接收者的完整ID。使用

检索它
myRoster.getRoster().getPresence(entry).getFrom()

然后,进行传输并确保接收方是使用XMPP的接收方,并且也不使用gtalk,因为它的文件传输与XMPP不同。

答案 2 :(得分:0)

我们发现SMACK在登录后往往会添加“/ smack”应用程序说明符。如果您使用上述技术,您应该会看到这种情况。奇怪的是,这不会影响邮件,但会影响文件传输