博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于smack的即时聊天系统之文件传输功能实现
阅读量:6274 次
发布时间:2019-06-22

本文共 2555 字,大约阅读时间需要 8 分钟。

功能实现流程为:

1.文件发送方用户登录

2.确定文件的接收方和待发送文件路径

3.获取连接

4.根据连接获取文件接收方的完整jid(例如user@192.168.1.34/MiniQQ 2.3.6),其中MiniQQ 2.3.6为文件接收方用户客户端的resource,必须获取到,否则文件无法发送

5.发送文件

实现代码为:

public int TransFile(String toUser, String fileDir) {		// final int flag[] = new int[] { 0 };		Connection conn = this.connection;		ServiceDiscoveryManager serviceDiscoveryManager = new ServiceDiscoveryManager(				conn);		// System.out.println(conn.toString());		// System.out.println(this.sessionManager.getConnection().toString());		if (!toUser.contains("@")) {			toUser = toUser + "@" + this.connection.getServiceName();		}		// toUser = toUser +"/Spark 2.6.3";		Roster roster = connection.getRoster();		Presence pre = roster.getPresence(toUser);		toUser = pre.getFrom();		if (!toUser.contains("/")) {			//toUser = toUser + "/MiniQQ 2.3.6";			toUser = toUser + "/MiniQQ 2.3.6";		}		System.out.println("向发送文件:" + toUser);		// System.out.println(toUser);		if (pre == null) {			System.out.println("用户不存在");			return -1;		}		FileTransferManager transferManager = new FileTransferManager(conn);		final File file = new File(fileDir);		final OutgoingFileTransfer transfer = transferManager				.createOutgoingFileTransfer(toUser);		// FutureTask
task = new FutureTask
(); FutureTask
task = new FutureTask<>(new Callable
() { @Override public Integer call() throws Exception { int flag = 0; try { transfer.sendFile(file, "Sending"); while (!transfer.isDone()) { try { Thread.sleep(10L); } catch (InterruptedException e) { e.printStackTrace(); } if (transfer.getStatus() == FileTransfer.Status.in_progress) { System.out.println(transfer.getProgress()); // flag[0] = 0; } else { if (transfer.getStatus() == FileTransfer.Status.error) { System.out.println("file transport failed");// // flag[0] = -1; flag = -1; // return ; } if (transfer.getStatus() == FileTransfer.Status.refused) { System.out .println("file transport was refused"); // flag[0] = -1; flag = -1; // return ; } } } } catch (XMPPException e1) { e1.printStackTrace(); // return ; } return flag; } }); SwingUtilities.invokeLater(task); int flagRes = 0; while (true) { if (task.isDone()) { try { flagRes = task.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } break; } } return flagRes; }

转载地址:http://zmmpa.baihongyu.com/

你可能感兴趣的文章
【译】Tree-shaking - webpack 2 和 Babel 6
查看>>
开源跨平台移动项目Ngui【Action动作系统】
查看>>
ESP32:mdns协议
查看>>
Docker拥抱k8s早有预兆,Docker现何去何从?
查看>>
PHP 源码探秘 - 为什么 trim 会导致乱码
查看>>
你不知道的CSS(二)
查看>>
Head First Python 学习心得(1-6章)
查看>>
从0实现一个tiny react(一)
查看>>
更换电脑后迁移博客
查看>>
20 行代码写一个数据推送服务
查看>>
Android逆向工程 实践篇
查看>>
[LeetCode] Pacific Atlantic Water Flow
查看>>
adb 常用命令
查看>>
[vscode]快速更新package.json里的依赖版本
查看>>
Windows中MongoDB之简单安装(1)
查看>>
搭建Hexo博客进阶篇---主题自定义(三)
查看>>
【Mysql中间件】Mycat安装部署+读写分离
查看>>
这3家在线旅行公司是如何通过转化优化提高订单量的
查看>>
RocketMq使用过程的那些小事
查看>>
Autodesk Forge 学习简谈 - 4
查看>>