XMPP通讯开发-好友文件传输

在XMPP通讯开发-好友通信实现 中我们实现了好友间的信息通信,在这里我们实现好友间文件的传输,这部分内容可以查看smack_3_3_0\documentation\extensions\index.html,文件传输我们主要用到的是FileTransferManager和OutgoingFileTransfer,当然我们可以发送文件也可以接收文件,要实现接收文件我们需要FileTransferManager添加一个监听事件FileTransferListener,来监听好友发送的文件事件,首先我们实现如何发送文件,代码如下:

private void sendFile(File file, String fileName){
        try {
            if(JUID == null)
                 JUID =  conn.getRoster().getEntry(frindsXmppAddress).getUser();
            transfer = fileManager.createOutgoingFileTransfer(frindsXmppAddress+"/Spark 2.6.3");
            transfer.sendFile(file, fileName);
            while(!transfer.isDone()){
                if(transfer.getStatus().equals(Status.error)){
                    System.out.println("ERROR!!! " + transfer.getError());
                }else{
                     System.out.println(transfer.getStatus()+"进度 "+transfer.getProgress());
                }
                 Thread.sleep(1000); 
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            if(transfer.getStatus().equals(Status.error)){
                ChatMessage.append(dateUtils.getHM()+"  自己: 传输出错"+"\n");
            }else if(transfer.getStatus().equals(Status.complete)){
                 ChatMessage.append(dateUtils.getHM()+"  自己: "+fileName+" 传输完成\n");
            }else if(transfer.getStatus().equals(Status.cancelled)){
                 ChatMessage.append(dateUtils.getHM()+frindsXmppAddress+"  "+fileName+" 传输取消\n");
            }
        }
   }
这里要注意的就是
 transfer = fileManager.createOutgoingFileTransfer(frindsXmppAddress+"/Spark 2.6.3");
函数的原型public OutgoingFileTransfer createOutgoingFileTransfer(String userID),其中的userID包含三部分,. A fully-qualified jabber ID consists of a node, a domain, and a resource, the user must be connected to the resource in order to be able to recieve the file transfer。其实也可以说两部分就是xmpp地址+对方客户端,一定要包含这几个,不然会报错的,效果图如下:
XMPP通讯开发-好友文件传输_第1张图片


XMPP通讯开发-好友文件传输_第2张图片

这个是发送文件,接收文件如何进行呢,代码如下:

 private void initTransFile(){
      fileManager = new FileTransferManager(conn);
      fileManager.addFileTransferListener(new FileTransferListener(){
          @Override
          public void fileTransferRequest(FileTransferRequest request) {
              int respone = JOptionPane.showConfirmDialog(null, frindsXmppAddress+"发送文件"+request.getFileName(), "发送文件", JOptionPane.YES_NO_OPTION);
             if(respone == 0){
                  try {
                      // Accept it
                     IncomingFileTransfer transfer = request.accept();
                     transfer.recieveFile(new File(request.getFileName()));
                  } catch (XMPPException ex) {
                      Logger.getLogger(ChatPanel.class.getName()).log(Level.SEVERE, null, ex);
                  }
             }else{
                 request.reject();
             }
          }
      });
   }
我们注册FileTransferListener进行监听,效果图如下:

XMPP通讯开发-好友文件传输_第3张图片


源码项目:https://github.com/jwzhangjie/IChat_PC.git


你可能感兴趣的:(android,通讯开发,XMPP通讯工具开发)