基于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;
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值