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

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

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

  1. 文件的发送

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

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

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

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

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

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

XMPP——Smack[5]文件传输及离线消息的获取的更多相关文章

  1. Asmack离线消息时间获取

    DelayInformation info = (DelayInformation)message.getExtension("x","jabber:x:delay&qu ...

  2. 基于ejabberd简单实现xmpp群聊离线消息

    首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact: 修改后实现群聊离线 ...

  3. ejabberd聊天室离线消息

    首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com /adamvduke/mod_interact: 修改后实现群聊离 ...

  4. XMPP——Smack[6]离线消息和离线文件的实现

    终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...

  5. XMPP系列(五)---文件传输

    xmpp中发送文件和接收文件的处理有些不太一样,接收文件处理比较简单,发送稍微复杂一些. 首先需要在XMPPFramework.h中添加文件传输类 //文件传输 //接收文件 #import &quo ...

  6. Xmpp获取离线消息

    文章只是选取了其中一段,无XMPP基础的人可能看起来有点复杂; 假设我们注册了一个用户,用户名叫shimiso,那么我们如何让shimiso这个用户一登陆就取到离线消息呢? PPConnection. ...

  7. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)

    (几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做 ...

  8. asmack xmpp 获取离线消息

    原文:http://plplum.blog.163.com/blog/static/31032400201503015345948/ 注意事项: 1.登录前要将状态设置为离线: ConnectionC ...

  9. xmpp和OpenFire示例,即时聊天室,支持离线消息

    让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同 ...

随机推荐

  1. [.NET MVC进阶系列0x] EF Code First 数据迁徙(Migrations)

    [因] Entity Framework中使用Code First模式进行开发时,数据库是基于Models中的类自动生成的(生成时间:第一次运行MVC项目时), 每次更改Models中类结构,重新编译 ...

  2. Java [leetcode 10] Regular Expression Matching

    问题描述: Implement regular expression matching with support for '.' and '*'. '.' Matches any single cha ...

  3. Android调试工具及方法

    转自:http://www.cnblogs.com/feisky/archive/2010/01/01/1637566.html Logcat Dump一份系统消息的日志.这些消息包括模拟器抛出错误时 ...

  4. 《深入Java虚拟机学习笔记》- 第9章 垃圾收集

    一.Java内存组成 组成图 堆(Heap) 运行时数据区域,所有类实例和数组的内存均从此处分配.Java虚拟机启动时创建.对象的堆内存由称为垃圾回收器的自动内存管理系统回收. 组成 组成 详解 Yo ...

  5. Java程序版权保护解决方案

    通常C.C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码.通常所有的源文件被编译.链接成一个可执行文件.在这些可执行文件中,编译器删除了程序中的变量名称.方法名称 ...

  6. put a ContextMenu into the header of a TabPage z

    publicclassMyTabControl:TabControl { protected override void OnMouseUp(MouseEventArgs e){ if(e.Butto ...

  7. 【Jenkins】Linux搭建Jenkins平台

    为了配合上一篇的ant+jenkins做持续集成,需要在linux环境下搭建一个jenkins平台.网上有很多安装的例子,我主要记录一下自己遇到的问题,真真的是特别惆怅的,每次我遇到的问题都格外多. ...

  8. lightoj 1017

    思路:动态规划,设dp[i][j]表示在前j个dusts中用了i刷子刷掉dusts的个数:状态转移方程就是: dp[i][j] = max(dp[i][j-1], dp[i-1][j-len[j]] ...

  9. 黑盒测试用例设计方法&理论结合实际 -> 因果图法

    一. 概念 因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况 二. 因果图法的应用 等价类划分法和边界值分析方法都是着重考虑输入条件,但没 ...

  10. Zabbix探索:工作时间的设置

    默认情况下,Zabbix的工作时间是启用的. 启用后,图形的北京在工作时间内就是白底的,否则就是灰底的. 今天纠结了半天,因为无论如何都是灰底的. 后来连接到服务器上一看,靠,忘记同步时间了,所以刚好 ...