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

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

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

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

  1. 文件的发送

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

[java] view plaincopyprint?

  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. 文件接收,必须使用监听

[java] view plaincopyprint?

  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]文件传输及离线消息的获取,布布扣,bubuko.com

时间: 2024-10-25 11:28:13

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

Asmack离线消息时间获取

DelayInformation info = (DelayInformation)message.getExtension("x","jabber:x:delay"); if (info != null) { Date date = info.getStamp(); Log.e("离线消息", "收到离线消息, 时间:"+date.getTime()); }

ejabberd聊天室离线消息

首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com /adamvduke/mod_interact: 修改后实现群聊离线消息:https://github.com/Joywok/mod_interact 不仅仅要修改这一个文件,还涉及到ehabberd_sm.mod_muc_room.mod_offline三个模块的修改. 以上三个文件仅仅只需要屏蔽或者修改几行代码就能实现了,很简单的. ehabberd_sm屏蔽

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

xmpp中发送文件和接收文件的处理有些不太一样,接收文件处理比较简单,发送稍微复杂一些. 首先需要在XMPPFramework.h中添加文件传输类 //文件传输 //接收文件 #import "XMPPIncomingFileTransfer.h" //发送文件 #import "XMPPOutgoingFileTransfer.h" 1.文件接收 文件的接收是被动的,所以需要在XMPPStream初始化的地方加入文件接收模块: //5.文件接收 _xmppInco

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

(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做做小项目也是不错的,这未尝不是一条养家糊口之路了?呵呵) 距离上次更新(GG叽叽V3.0,完善基础功能)正好有1个月了,在这个月中,我主要为GG增加了离线消息和离线文件的功能.之所以将这两个功能提前实现,是因为至GG发布以来,就有很多朋友问我在GG的基础上如何实现离线消息和离线文件.看来作为一个能用

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

(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做做小项目也是不错的,这未尝不是一条养家糊口之路了?呵呵) 距离上次更新(GG叽叽V3.0,完善基础功能)正好有1个月了,在这个月中,我主要为GG增加了离线消息和离线文件的功能.之所以将这两个功能提前实现,是因为至GG发布以来,就有很多朋友问我在GG的基础上如何实现离线消息和离线文件.看来作为一个能用

Android RakNet 系列之四 实现消息、语音、文件传输

简介 RakNet在Win平台上已经实现消息.语音.文件传输了,但在Android平台下尚未实现,笔者决定把源码移植到Android平台下测试. 详情 实现消息 项目自带Chat Example Client和Chat Example Server实现消息,源码简单易懂,此处就不介绍了,直接贴上图片. 测试通过,消息是以Toast方式显示的,图片未捕捉到显示. 实现语音 Win平台下实现语音是通过Portaudio进行的,Portaudio尚未支持Android,要实现语音怎么办? Java层实

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

让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接执行.少走弯路了.时间就是金钱,不要花费不必要的时间,也希望大家都能有分享精神.,有问题能够发邮件给我([email protected]) 关于xmpp和openfire的资料请百度百科一下 下面展示一个聊天程序.所谓万事都要有Helloworld嘛,这个demo能够做为学习xmpp和

openfire+spark+smack 即时通讯(问题篇一)离线消息获取不到

即时通信功能已经开发完毕,现在还木有时间整理,打算后期抽时间整理后发一下源码跟教程.现在记录一下遇到的问题,首先是获取离线消息. OfflineMessageManager是官方获取离线消息的,但是直接获取,是获取不到任何消息的,需要先设置离线,然后获取后,再上线.功能代码如下. 1.离线 // 初始化 public XMPPConnection init(LoginConfig loginConfig) { Connection.DEBUG_ENABLED = false; ProviderM

XMPP之文件传输报文

最近在做文件传输,遇到只能发送文件到spark,spark发送文件来不能接收,要么一直等待,要么发一下就要重试,这天终于找到问题的所在了 我的openfire里面的:服务器->服务器设置->文件传输设置 里面的代理服务被禁用了,应该要使用里面的"使用" 这是我同学总结分析出来的传输文件的报文,由于我们两个是一起在做,我就不去抓了,为了记笔记不得不发一下 发送文件场景: 1,对方拒接 2,对方同意接受 2.1对方中途中断接收 2.2我方中途中断发送 2.3发送成功 -----