基于smack的即时聊天系统之文件传输功能实现
来源:互联网 发布:残棋破解软件 编辑:程序博客网 时间:2024/05/21 07:04
功能实现流程为:
1.文件发送方用户登录
2.确定文件的接收方和待发送文件路径
3.获取连接
4.根据连接获取文件接收方的完整jid(例如user@192.168.1.34/MiniQQ 2.3.6),其中MiniQQ 2.3.6为文件接收方用户客户端的resource,必须获取到,否则文件无法发送
5.发送文件
实现代码为:
<span style="font-size:18px;">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<Integer> task = new FutureTask<Integer>();FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {@Overridepublic 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;}</span>
1 0
- 基于smack的即时聊天系统之文件传输功能实现
- 基于smack的即时聊天系统之登陆功能的实现
- 基于smack的即时聊天系统之文件接收功能实现
- 即时聊天表情功能的实现
- Java:基于socket的聊天实现+文件传输
- 构建自己的即时聊天系统(基于xmpp)(转载)
- 基于 xmpp 的即时聊天
- Android即时聊天系统-随聊App之接口实现
- Socket编程一实现简易的聊天功能以及文件传输
- Socket编程一实现简易的聊天功能以及文件传输
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[三]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- node-socket实现web的即时聊天系统
- 初探基于TCP的服务器/客户端结构的聊天系统(三)之表情聊天的实现
- #征文再续#Android基于XMPP Smack Openfire开发IM即时聊天(二)
- 基于openfire+smack开发Android即时聊天应用[一]---openfire安装部署
- bss段和数据段
- Android Internals: 主界面Launch Activity是如何被启动的?
- Objective - C基础: 第五天 - 3.set方法内存管理
- Windchill: Proe里注册不了服务器的解决办法
- python中unicode、utf8、gbk等编码问题
- 基于smack的即时聊天系统之文件传输功能实现
- Redhat KVM网络配置
- 访问网站时强制打开QQ聊天窗口代码
- Android 3.1 r1 API中文文档(6)——ImageView 结构
- a标签中有点击事件
- PHP编译选项
- 在libuv之上做的简单C++封装
- Window平台Lua编译和环境搭建
- 邮件发送系统设计——忘记密码发送邮件的设计(1)