基于smack的即时聊天系统之文件接收功能实现

实现思路为:

1.接收方用户登录

2.获取文件发送方用户名

3.获取需要接收的文件名

4.获取需要接收的文件大小

5.设置文件存放路径

6.接收文件

实现代码为:

public int SetTransFileCallBack(final Method method,
			final Object instance, final String downloadeDir) {
		FileTransferManager transferManager = new FileTransferManager(
				this.connection);

		transferManager.addFileTransferListener(new FileTransferListener() {
			public void fileTransferRequest(final FileTransferRequest request) {
				String fromwhere = request.getRequestor();
				int pos = fromwhere.lastIndexOf('@');
				String from = fromwhere.substring(0, pos);
				if (!from.equals("sharefilemanager"))
					SwingUtilities.invokeLater(new Runnable() {
						public void run() {
							String fileName = request.getFileName();
							long fileSize = request.getFileSize();
							String requestor = request.getRequestor();
							String bareJID = org.jivesoftware.smack.util.StringUtils
									.parseBareAddress(requestor);

							ByteFormat format = new ByteFormat();
							String text = format.format(fileSize);

							IncomingFileTransfer transfer = request.accept();
							File filecreate = new File(downloadeDir);
							if (!filecreate.exists()) {
								filecreate.mkdirs();
							}
							File downloadedFile = new File(downloadeDir,
									request.getFileName());
							try {
								transfer.recieveFile(downloadedFile);
								while (true) {
									if (transfer.getStatus() == FileTransfer.Status.complete) {
										try {
											method.invoke(instance,
													new Object[] { fileName,
															bareJID, text,
															downloadeDir });
										} catch (IllegalArgumentException e) {
											e.printStackTrace();
										} catch (IllegalAccessException e) {
											e.printStackTrace();
										} catch (InvocationTargetException e) {
											e.printStackTrace();
										}
										return;
									}
									try {
										Thread.sleep(10L);
									} catch (InterruptedException e) {
										e.printStackTrace();
									}
								}
							} catch (XMPPException e) {
								e.printStackTrace();
							}
						}
					});
			}
		});
		return 0;
	}
时间: 2024-08-02 15:07:55

基于smack的即时聊天系统之文件接收功能实现的相关文章

基于smack的即时聊天系统之文件传输功能实现

功能实现流程为: 1.文件发送方用户登录 2.确定文件的接收方和待发送文件路径 3.获取连接 4.根据连接获取文件接收方的完整jid(例如[email protected]/MiniQQ 2.3.6),其中MiniQQ 2.3.6为文件接收方用户客户端的resource,必须获取到,否则文件无法发送 5.发送文件 实现代码为: <span style="font-size:18px;">public int TransFile(String toUser, String f

基于smack的即时聊天系统之登陆功能的实现

登陆功能的实现:主要思路是:1.配置连接信息2.创建XMPP连接对象:3.建立连接:4.登陆 1.配置连接信息 主要是配置服务器IP和端口号,ConnectionConfiguration()函数中第一个参数是服务器IP地址,第二个参数是端口号.第一个参数也可以写成服务器主机名,要是写为服务器主机名的话,需要修改客户端host,在hosts中添加服务器IP地址和其主机名,如下图所示.host文件在windows系统中的路径为:C:\WINDOWS\system32\drivers\etc\hos

Smack+Openfire 文件接收与发送

转载请说明出处:http://blog.csdn.net/steelychen/article/details/37958839 发送文件需要提供准确的接收放用户名称(例:[email protected]).本地文件全路径(例:E:\\xxx\\xxx.zip) 接收文件必须声明一个文件监听器用于监听有可能发送过来的文件. 客户端发送文件代码片断 public void sendFire(XMPPConnection conn,String toUser,String filePath)thr

Android基于XMPP的即时通讯2-文件传输

本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager getFileTransferManager() { if (fileManager == null) { ServiceDiscoveryManager sdManager = ServiceDiscoveryManager .getInstanceFor(connection); if (sdMana

node.js+Express.js+Jade+MongoDB开发Web即时聊天系统视频教程下载

ode.js+Express.js+Jade+MongoDB开发Web即时聊天系统视频教程下载  联系QQ:1026270010  一.课程背景 1.什么是Node.js ? Node.js 是一个可以快速构建网络服务及应用的平台 .该平台的构建是基于Chrome's JavaScript runtime,也就是说,实际上它是对Google V8引擎(应用于Google Chrome浏览器)进行了封装. V8引擎执行Javascript的速度非常快,性能非常好.Node对一些特殊用例进行了优化,

Android基于XMPP的即时通讯3-表情发送

这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs.com/files/pear-lemon/drawable.zip 2.表情布局文件layout_send_emotion.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln

【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例

基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院  欧浩源 1.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况.经过使用了多线程来处理,而然轮询的办法比较还是比较笨拙的.我们在实际的项目开发中,更加常用的是基于事件触发的方式,这个方式不但好用,而且灵活,只是使用起来需要更多的一点专业知识.在本博文中,就"传感器模块每隔1秒钟向上位机传送4字节的电压数据帧"的项目,对该方法的设计进行详细的讲述.  

基于smack的xmpp packet 重写

基于Smack 实现Notification数据包.smack的类中有一个org.jivesoftware.smack.packet.IQ只需对他重写即可,在做的时候其实可以简单一点的,如果你使用tinder.jar 包,其IQ org.xmpp.packet.IQ 有一个 setChildElement 方法与 getChildElement相对应,但smack没有! 主要用于与android Client之间Push通信.定义一套自己的数据包格式: 1 <iq id="11111&qu

进程交互-基于NOR Flash的嵌入式简易文件系统设计(3)

DIR 基于NOR Flash的嵌入式简易文件系统设计 PAGE 进程交互 SN 003 Version 000.000.001待完成 Author David Lin E-mail [email protected]     [email protected] Blog http://blog.csdn.net/linpeng12358 免责声明 本文不涉及本人所在公司任何项目,输出自本人在阅读Linux0.12源码及<Unix操作系统设计>过程中的心得体会,不存在任何泄露公司文件或者机密问