XMPP——Smack[5]文件传输及离线消息的获取
三天时间,赶在最后一下午实现了文件的传输,本来需要实现离线文件的发送的,一直没想好怎么弄,找openfire的离线文件插件没找到,后来想出一种方法,起服务器时起了一个系统用户,一直在线,当用户发送离线文件,检测到对方不存在,先发给系统用户,存到服务器路径,并在数据库中保存信息,当对方上线时,系统用户查表,拿文件发送
想是这么想的,问题是时间太紧,没有实现,囧。
下一篇写离线消息和离线文件
- 文件的发送
开一个文件选择框,选中文件后再调用下面的方法
- public static void sendFile(XMPPConnection connection,
- String user, File file) throws XMPPException, InterruptedException {
- System.out.println("发送文件开始"+file.getName());
- FileTransferManager transfer = new FileTransferManager(Client.getConnection());
- System.out.println("发送文件给: "+user+Client.getServiceNameWithPre());
- OutgoingFileTransfer out = transfer.createOutgoingFileTransfer(user+Client.getServiceNameWithPre()+"/Smack");//
- out.sendFile(file, file.getName());
- System.out.println("//////////");
- System.out.println(out.getStatus());
- System.out.println(out.getProgress());
- System.out.println(out.isDone());
- System.out.println("//////////");
- System.out.println("发送文件结束");
- }
- 文件接收,必须使用监听
- FileTransferManager transfer = new FileTransferManager(connection);
- transfer.addFileTransferListener(new RecFileTransferListener());
- public class RecFileTransferListener implements FileTransferListener {
- public String getFileType(String fileFullName)
- {
- if(fileFullName.contains("."))
- {
- return "."+fileFullName.split("//.")[1];
- }else{
- return fileFullName;
- }
- }
- @Override
- public void fileTransferRequest(FileTransferRequest request) {
- System.out.println("接收文件开始.....");
- final IncomingFileTransfer inTransfer = request.accept();
- final String fileName = request.getFileName();
- long length = request.getFileSize();
- final String fromUser = request.getRequestor().split("/")[0];
- System.out.println("文件大小:"+length + " "+request.getRequestor());
- System.out.println(""+request.getMimeType());
- try {
- JFileChooser chooser = new JFileChooser();
- chooser.setCurrentDirectory(new File("."));
- int result = chooser.showOpenDialog(null);
- if(result==JFileChooser.APPROVE_OPTION)
- {
- final File file = chooser.getSelectedFile();
- System.out.println(file.getAbsolutePath());
- new Thread(){
- public void run()
- {
- try {
- System.out.println("接受文件: " + fileName);
- inTransfer
- .recieveFile(new File(file
- .getAbsolutePath()
- + getFileType(fileName)));
- Message message = new Message();
- message.setFrom(fromUser);
- message.setProperty("REC_SIGN", "SUCCESS");
- message.setBody("["+fromUser+"]发送文件: "+fileName+"/r/n"+"存储位置: "+file.getAbsolutePath()+ getFileType(fileName));
- if (Client.isChatExist(fromUser)) {
- Client.getChatRoom(fromUser).messageReceiveHandler(
- message);
- } else {
- ChatFrameThread cft = new ChatFrameThread(
- fromUser, message);
- cft.start();
- }
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- }.start();
- }else{
- System.out.println("拒绝接受文件: "+fileName);
- request.reject();
- Message message = new Message();
- message.setFrom(fromUser);
- message.setBody("拒绝"+fromUser+"发送文件: "+fileName);
- message.setProperty("REC_SIGN", "REJECT");
- if (Client.isChatExist(fromUser)) {
- Client.getChatRoom(fromUser)
- .messageReceiveHandler(message);
- } else {
- ChatFrameThread cft = new ChatFrameThread(
- fromUser, message);
- cft.start();
- }
- }
- /* InputStream in = inTransfer.recieveFile();
- String fileName = "r"+inTransfer.getFileName();
- OutputStream out = new FileOutputStream(new File("d:/receive/"+fileName));
- byte[] b = new byte[512];
- while(in.read(b) != -1)
- {
- out.write(b);
- out.flush();
- }
- in.close();
- out.close();*/
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("接收文件结束.....");
- }
- }
晕死,在演示的时候竟然发送文件崩盘了。。。。。实在无语
对了,在发送文件的createOutgoing那边有问题,貌似/Smack,哎,对spark发送就不成功
短短三天,查资料差得头晕,中文的信息貌似少之又少,哎,匆匆完成,只能算是个半成品,大家自己完善吧。
呵呵,下一篇最后一篇了,谢谢离线消息和离线文件吧
XMPP——Smack[5]文件传输及离线消息的获取的更多相关文章
- Asmack离线消息时间获取
DelayInformation info = (DelayInformation)message.getExtension("x","jabber:x:delay&qu ...
- 基于ejabberd简单实现xmpp群聊离线消息
首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact: 修改后实现群聊离线 ...
- ejabberd聊天室离线消息
首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com /adamvduke/mod_interact: 修改后实现群聊离 ...
- XMPP——Smack[6]离线消息和离线文件的实现
终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...
- XMPP系列(五)---文件传输
xmpp中发送文件和接收文件的处理有些不太一样,接收文件处理比较简单,发送稍微复杂一些. 首先需要在XMPPFramework.h中添加文件传输类 //文件传输 //接收文件 #import &quo ...
- Xmpp获取离线消息
文章只是选取了其中一段,无XMPP基础的人可能看起来有点复杂; 假设我们注册了一个用户,用户名叫shimiso,那么我们如何让shimiso这个用户一登陆就取到离线消息呢? PPConnection. ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)
(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做 ...
- asmack xmpp 获取离线消息
原文:http://plplum.blog.163.com/blog/static/31032400201503015345948/ 注意事项: 1.登录前要将状态设置为离线: ConnectionC ...
- xmpp和OpenFire示例,即时聊天室,支持离线消息
让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同 ...
随机推荐
- 25.allegro中模块复用[原创]
一,Module reuse 1,打开原理图 ------------------- --------------------- ctrl+i过滤器 直选part ctrl+e 查看属性 查看: 是否 ...
- Android 权限查寻表
示例 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" ...
- sublime text2卸载和重新安装
很多同学使用 sublime text2 的时候,出现一些奇怪的bug,且重启无法修复. 于是,就会想到卸载 sublime text2 再重新安装. 然而,你会发现,重新安装后,这个bug任然存在, ...
- poj2406 周期
脑残wa了一次 var s:ansistring; ans,i,k,m:longint; pre:..] of longint; function max(x,y:longint):longint; ...
- hud 3336 count the string (KMP)
这道题本来想对了,可是因为hdu对pascal语言的限制是我认为自己想错了,结果一看题解发现自己对了…… 题意:给以字符串 计算出以前i个字符为前缀的字符中 在主串中出现的次数和 如: num(aba ...
- JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...
- Android开发优化宝典
I. 网络相关 http头信息带Cache-Control域 确定缓存过期时间 防止重复请求 直接用IP直连,不用域名,策略性跟新本地IP列表. – DNS解析过程耗时在百毫秒左右,并且还有可能存在D ...
- 事件处理程序(addEventListener 和 attachEvent)
1.addEventListener 和 removeEventListener 接收三个参数:要处理的事件名.作为事件处理程序的函数和布尔值 缺点:不兼容IE <body> <in ...
- (六)学习CSS之color属性
参考:http://www.w3school.com.cn/cssref/pr_text_color.asp color 属性规定文本的颜色. 这个属性设置了一个元素的前景色(在 HTML 表现中,就 ...
- CF GYM 100703L Many questions
题意:题意真坑……龙要问一系列问题,王子骑士公主分别以一个整数回答,如果王子和公主答案差的绝对值比骑士和公主答案差的绝对值小则说王子和公主的答案更相似,反过来如果前者比后者大则说骑士和公主的答案更相似 ...