• XMPP——Smack[5]文件传输及离线消息的获取


    三天时间,赶在最后一下午实现了文件的传输,本来需要实现离线文件的发送的,一直没想好怎么弄,找openfire的离线文件插件没找到,后来想出一种方法,起服务器时起了一个系统用户,一直在线,当用户发送离线文件,检测到对方不存在,先发给系统用户,存到服务器路径,并在数据库中保存信息,当对方上线时,系统用户查表,拿文件发送

    想是这么想的,问题是时间太紧,没有实现,囧。

    下一篇写离线消息和离线文件

    1. 文件的发送

    开一个文件选择框,选中文件后再调用下面的方法

    1. public static void sendFile(XMPPConnection connection,  
    2.             String user, File file) throws XMPPException, InterruptedException {  
    3.           
    4.         System.out.println("发送文件开始"+file.getName());  
    5.         FileTransferManager transfer = new FileTransferManager(Client.getConnection());  
    6.         System.out.println("发送文件给: "+user+Client.getServiceNameWithPre());  
    7.         OutgoingFileTransfer out = transfer.createOutgoingFileTransfer(user+Client.getServiceNameWithPre()+"/Smack");//  
    8.           
    9.         out.sendFile(file, file.getName());  
    10.           
    11.         System.out.println("//////////");  
    12.         System.out.println(out.getStatus());  
    13.         System.out.println(out.getProgress());  
    14.         System.out.println(out.isDone());  
    15.           
    16.         System.out.println("//////////");  
    17.           
    18.         System.out.println("发送文件结束");  
    19.     }  
    1. 文件接收,必须使用监听
    1. FileTransferManager transfer = new FileTransferManager(connection);  
    2. transfer.addFileTransferListener(new RecFileTransferListener());  
    3.   
    4. public class RecFileTransferListener implements FileTransferListener {  
    5.   
    6.     public String getFileType(String fileFullName)  
    7.     {  
    8.         if(fileFullName.contains("."))  
    9.         {  
    10.             return "."+fileFullName.split("//.")[1];  
    11.         }else{  
    12.             return fileFullName;  
    13.         }  
    14.           
    15.     }  
    16.       
    17.     @Override  
    18.     public void fileTransferRequest(FileTransferRequest request) {  
    19.         System.out.println("接收文件开始.....");  
    20.         final IncomingFileTransfer inTransfer = request.accept();  
    21.         final String fileName = request.getFileName();  
    22.         long length = request.getFileSize();   
    23.         final String fromUser = request.getRequestor().split("/")[0];  
    24.         System.out.println("文件大小:"+length + "  "+request.getRequestor());  
    25.         System.out.println(""+request.getMimeType());  
    26.         try {   
    27.               
    28.             JFileChooser chooser = new JFileChooser();   
    29.             chooser.setCurrentDirectory(new File("."));   
    30.               
    31.             int result = chooser.showOpenDialog(null);  
    32.               
    33.             if(result==JFileChooser.APPROVE_OPTION)  
    34.             {  
    35.                 final File file = chooser.getSelectedFile();  
    36.                 System.out.println(file.getAbsolutePath());  
    37.                     new Thread(){  
    38.                         public void run()  
    39.                         {  
    40.                         try {  
    41.   
    42.                             System.out.println("接受文件: " + fileName);  
    43.                             inTransfer  
    44.                                     .recieveFile(new File(file  
    45.                                             .getAbsolutePath()  
    46.                                             + getFileType(fileName)));  
    47.   
    48.                             Message message = new Message();  
    49.                             message.setFrom(fromUser);  
    50.                             message.setProperty("REC_SIGN", "SUCCESS");  
    51.                             message.setBody("["+fromUser+"]发送文件: "+fileName+"/r/n"+"存储位置: "+file.getAbsolutePath()+ getFileType(fileName));  
    52.                             if (Client.isChatExist(fromUser)) {  
    53.                                 Client.getChatRoom(fromUser).messageReceiveHandler(  
    54.                                         message);  
    55.                             } else {  
    56.                                 ChatFrameThread cft = new ChatFrameThread(  
    57.                                         fromUser, message);  
    58.                                 cft.start();  
    59.                                   
    60.                             }  
    61.                         } catch (Exception e2) {  
    62.                             e2.printStackTrace();  
    63.                         }  
    64.                         }  
    65.                     }.start();  
    66.             }else{  
    67.                   
    68.                 System.out.println("拒绝接受文件: "+fileName);  
    69.                   
    70.                 request.reject();  
    71.                 Message message = new Message();  
    72.                 message.setFrom(fromUser);  
    73.                 message.setBody("拒绝"+fromUser+"发送文件: "+fileName);  
    74.                 message.setProperty("REC_SIGN", "REJECT");  
    75.                 if (Client.isChatExist(fromUser)) {  
    76.                     Client.getChatRoom(fromUser)  
    77.                             .messageReceiveHandler(message);  
    78.                 } else {  
    79.                     ChatFrameThread cft = new ChatFrameThread(  
    80.                             fromUser, message);  
    81.                     cft.start();  
    82.                 }  
    83.             }  
    84.               
    85.               
    86.               
    87.               
    88.                
    89.             /* InputStream in = inTransfer.recieveFile(); 
    90.               
    91.              String fileName = "r"+inTransfer.getFileName(); 
    92.               
    93.              OutputStream out = new FileOutputStream(new File("d:/receive/"+fileName)); 
    94.              byte[] b = new byte[512]; 
    95.              while(in.read(b) != -1) 
    96.              { 
    97.                  out.write(b); 
    98.                  out.flush(); 
    99.              } 
    100.               
    101.              in.close(); 
    102.              out.close();*/  
    103.         } catch (Exception e) {  
    104.             e.printStackTrace();  
    105.         }  
    106.           
    107.         System.out.println("接收文件结束.....");  
    108.   
    109.     }  
    110.   
    111. }  

    晕死,在演示的时候竟然发送文件崩盘了。。。。。实在无语

    对了,在发送文件的createOutgoing那边有问题,貌似/Smack,哎,对spark发送就不成功

    短短三天,查资料差得头晕,中文的信息貌似少之又少,哎,匆匆完成,只能算是个半成品,大家自己完善吧。

    呵呵,下一篇最后一篇了,谢谢离线消息和离线文件吧

  • 相关阅读:
    打开模拟器genymotion 的设置 查询设置的包名
    python 地板除 向下取整 取比目标结果小的的最大整数
    python 复数
    python 0.1+0.2 不等于0.3 的处理办法
    python 利用随机数的种子,复现随机数
    小程序 单独页面的js文件里设置 数据绑定
    问题集
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业04
  • 原文地址:https://www.cnblogs.com/jiayonghua/p/3765926.html
Copyright © 2020-2023  润新知