基于XMPP协议的即时聊天工具之发送文件

来源:互联网 发布:武侠小说推荐 知乎 编辑:程序博客网 时间:2024/05/18 23:15

最初还是在学校时接触的XMPP, 当时是做的一个简单的基于XMPP协议的聊天工具,功能不是很全,只是实现了收、发消息、表情功能。

最近不是很忙,就补充了一些功能, 这里说一下文件的发送。

     public void sendFile(File file){

    // 这段代码有些人说必须带,我试了试,在我的工程中发文件是带不带没啥区别
//     ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
//         if (sdm == null)
//         sdm = new ServiceDiscoveryManager(connection);
//         sdm.addFeature("http://jabber.org/protocol/disco#info");
//         sdm.addFeature("jabber:iq:privacy");
   
   
    FileTransferManager ftManager = new FileTransferManager(connection);
    FileTransferNegotiator.setServiceEnabled(connection, true);
    String to = connection.getRoster().getPresence("aaa@ServerIp/spark").getFrom();//获得用户状态

//    to = "xxx"+"@"+"xxx"+"/"+"xxx";//一定注意这里必须是完整JID   jid = [ node "@" ] domain [ "/" resource ]

//     我是用的android客户端给spark客户端发送文件    

    OutgoingFileTransfer transfer = ftManager.createOutgoingFileTransfer(to);
    try {
transfer.sendFile(file, file.getName());
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
    while(!transfer.isDone()) {
    if(transfer.getStatus().equals(FileTransfer.Status.in_progress)){
    //可以调用transfer.getProgress();获得传输的进度
    Log.i("wht", "传输进度 = "+transfer.getProgress());
   
    }else if(transfer.getStatus().equals(FileTransfer.Status.error)) {
         System.out.println("ERROR!!! " + transfer.getError());
      } else if (transfer.getStatus().equals(FileTransfer.Status.cancelled)
                       || transfer.getStatus().equals(FileTransfer.Status.refused)) {
         System.out.println("Cancelled!!! " + transfer.getError());
      }
      try {
         Thread.sleep(1000);
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
    }


    }