基于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-07-28 13:58:01

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

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

功能实现流程为: 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 f

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

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

java源码-基于java的即时聊天系统设计与实现源代码

问题描述 基于java的即时聊天系统设计与实现源代码 我是一个菜鸟,最近在做一个即时聊天系统,希望给一些,关于文件传输方面的代码,这些大家喽 解决方案 http://blog.csdn.net/u011596810/article/details/39003523 这个是讲socket请求连接,可以看看 解决方案二: 基于websocket+java聊天系统的实现 解决方案三: 如果你是web系统的话,可以考虑h5的websocket 解决方案四: node.js+html5+webRTC 解决

基于Lumisoft.NET组件的POP3邮件接收和删除操作

Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需要,需要利用该组件来接收邮件,邮件通过POP3协议进行接收到本地,故对该组件进行了全面的了解和使用.本文主要是在此背景上,介绍该组件的POP3协议处理类的使用.Lumisoft.NET组件2013年作者有做了一定的更新,修复了一些问题,本文是基于该组件的最新版本进行开发使用. 1.POP3登录及头部

哎哎哎!急-请求大神帮忙用JAVA写一个基于UDP的语音聊天系统

问题描述 请求大神帮忙用JAVA写一个基于UDP的语音聊天系统 有报酬!!?谢谢!!急急 解决方案 有报酬,两个馒头.呵呵...... UDP 实际简单,但语音部分还是有一些工作量的.

java socket 文件传输-java socket 传文件文件接收后不能打开

问题描述 java socket 传文件文件接收后不能打开 java socket传文件,客户端将文件读取到byte[]中,然后用Map对相关内容进行包装之后输出到服务器端,但服务器端读取文件内容的循环除第一次读取的Map是客户端写入过来的内容外,从第二次循环开始Map的内容都跟第一次一样的,请问怎么回事? 服务器端代码: `public void run() { ObjectInputStream is = null; OutputStream os = null; byte cache[]

ios-iOS 开发,基于GCDAsyncSocket的即时通讯是怎样在两个用户间完成的

问题描述 iOS 开发,基于GCDAsyncSocket的即时通讯是怎样在两个用户间完成的 iOS 开发,基于GCDAsyncSocket的即时通讯是怎样在两个用户间完成的?比如a发一条信息给b,这条信息是怎样经过服务器到达b的 解决方案 A即时发送端也是 接受端 开不同的端口去监听,B也一样,一直监听与A发送端 端口相同的接口,这样A发送数据到 服务端B的端口XXX B一直监听者自身端口的XXX 这样A发送的消息 B就可以接受到 解决方案二: 两个客户端都连在服务器上,各自发送数据给服务器,然

基于nodejs+express(4.x+)实现文件上传功能_node.js

Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新.基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术.在Express4时,替换掉中件间库connect,而改用多个更细粒度的库来取代.带来的好处是明显地,这些中间件能更自由的更新和发布,不会受到Express发布周期的影响:但问题也是很的棘手,不兼容于之前的版本,升级就意味着要修改代码. 通过一段时间的查阅资料.摸索,我发现实现上传的方式有:1.expres

前端js实现文件的断点续传 后端PHP文件接收_javascript技巧

早就听说过断点续传这种东西,前端也可以实现一下. 断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的 本文通过断点续传的简单例子(前端文件提交+后端PHP文件接收),理解其大致的实现过程 还是先以图片为例,看看最后的样子 一.一些知识准备 断点续传,既然有断,那就应该有文件分割的过程,一段一段的传. 以前文件无法分割,但随着HTML5新特性的引入,类似普通字符串.数组的分割,我们可以可以使用slice方法来分割文件. 所以断点续传的最基本实现也就是:前端通