Smack 的 FileTransferManager.createOutgoingFileTransfer 仅接受完整的 JID。如何在 Smack 中确定用户的完整 JID?

2024-01-10

经过几个小时的调试并试图找出为什么使用 aSmack 无法进行文件传输,而正常的消息传递却可以,我终于设法将其确定为这一点。

当我按照 Smack 文档中给出的方法获取用户的名册列表时,Openfire 服务器发送的名册 JID 末尾缺少 / 。

Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry r : entries) {
    Log.v("Gabriel","Receiving: " + r.getUser());
}      

例如,如果我收到来自用户 gabriel 的消息,我得到的“发件人”为:

gabriel@dragonov/Smack

但 r.getUser() 返回给用户为

gabriel@dragonov

Even

connection.getRoster().getPresence(contactName).getFrom()

返回的形式为“gabriel@dragonov”。

这导致文件传输失败,但奇怪的是不是常规消息传递失败。但是,当我在末尾手动添加 /Smack 时

 OutgoingFileTransfer transferr = manager.createOutgoingFileTransfer(contactJID+"/Smack");

有用。

我的问题是,如何接收包含资源部分的完整 JID 或配置文件传输,以便在使用裸 JID 时不会失败?


Edit:

我尝试过以下方法:

 Log.v("Gabriel", entries.size() + " buddy(ies):");
    for (RosterEntry r : entries) {
        Log.v("Pat","adding: " + r.getType() + "  " + r.getName());
        contacts.add(r.getUser());
    }      

    for (String contact : contacts){
        Iterator<org.jivesoftware.smack.packet.Presence> presences = connection.getRoster().getPresences(contact);
        Log.v("Gabriel", contact+" has: ");
        while(presences.hasNext()){
            Log.v("Gabriel",presences.next().getFrom());
        }           
    }

但我仍然拿到了裸身份证。

输出: gabriel@dragonov 有: 加布里埃尔@dragonov


Use Iterator<Presence> Roster.getPresences(String user) http://www.igniterealtime.org/builds/smack/docs/3.2.2/javadoc/org/jivesoftware/smack/Roster.html#getPresences%28java.lang.String%29从用户的所有已知资源获取存在信息。对于此 Presence 实例getFrom()应该返回一个完整的 JID,您可以在其中使用FileTransferManager.createOutgoingFileTransfer().

我创造了SMACK-430 http://issues.igniterealtime.org/browse/SMACK-430,关于在中使用完整的 JIDcreateOutgoingFileTranfer()。它确实应该抛出异常,这样用户就不必花费数小时的调试时间来查找原因(尽管方法 javadoc 中有说明)。 SMACK-430 还解释了为什么 FileTransferManager 需要完整的 JID 并且不能与裸 JID 一起使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Smack 的 FileTransferManager.createOutgoingFileTransfer 仅接受完整的 JID。如何在 Smack 中确定用户的完整 JID? 的相关文章

  • NAT后的两个节点如何通信?

    我有一些节点 每个节点都属于其他网络 每个节点都有私有IP 例如192 168 0 2并保持在 NAT 之后 节点之间是否有可能进行通信 实际上 我需要在这些独立节点之间传输文件 我尝试使用这个项目 https github com lib
  • XMPP 带有支持 X-FACEBOOK-PLATFORM 的 Java Asmack 库

    我正在尝试使用 Smack 库在 Android 上进行 Facebook 聊天 我读过Chat API http developers facebook com docs chat 来自 Facebook 但我不明白如何使用这个库向 Fa
  • 通过蓝牙传输文件,如 Android 蓝牙聊天示例

    如何使用 Android 蓝牙聊天示例并将其更改为文件传输 我想通过蓝牙将本地 SQLite 数据库传输到另一台 Android 设备 我更改了示例代码 http developer android com resources sample
  • Whatsapp 或 telegram 等应用程序如何监听 Android 上的来电/消息事件?

    我构建了一个 VoIP 呼叫应用程序 它与服务器保持持久连接以监听任何来电 我实现了一个后台服务来做到这一点 但自从 Oreo 以来 由于引入了后台执行限制 https developer android com about version
  • Android:通过套接字接收到的图像已损坏

    嗨 问题是 服务器正确地将图像发送到客户端 我认为 从客户端接收到的文件与服务器电话上存在的文件大小相同 因此我猜每个字节都已传输 但图像仍然不可见 服务器和客户端都是安卓手机 预先感谢我希望你能帮助我 服务器代码 public class
  • 处理基于 Strope.js 的聊天应用程序中的状态

    是否有任何现有解决方案可以为基于 Strope js 的聊天应用程序提供在线状态处理 我有一个基于 Strope js 的简单聊天应用程序 我想仅显示在线并动态更改列表的用户 我想知道是否有任何现有的解决方案 可能是 Strope 插件 可
  • 仅使用 GCM 开发 Android 聊天应用程序(放弃 XMPP)是否合适?

    很多应用程序 例如WhatsApp依靠GCM当设备空闲或应用程序在后台运行时向设备发送通知 这GCM消息只是告诉应用程序从服务器同步 然后XMPP用于进行实际的聊天 传递有效负载 但这是一个好的决定吗 GCM发送消息 因此 就我而言 当一个
  • 仅具有不同资源的 JID 是否可以加入同一多用户聊天室

    在xmpp中 以下2个用户可以加入多用户聊天 MUC 或订阅相同的发布 订阅节点吗 电子邮件受保护 cdn cgi l email protection user1 电子邮件受保护 cdn cgi l email protection us
  • 通过xmpp在android中传输文件?

    我只是想通过 xmpp 传输文件 我正在使用 asmack lib 我在下面遇到异常 E AndroidRuntime 332 FATAL EXCEPTION main E AndroidRuntime 332 java lang Null
  • 为什么发送电子邮件需要多个邮件服务器跃点?

    当我向某人发送电子邮件时 我认为 我的电子邮件被发送到我的家庭服务器 然后电子邮件被发送到目标服务器 最后被发送到我想要发送给的人 有时 这需要多次跳跃 这是让我困惑的一点 为什么这需要多跳 为什么邮件不能直接发送到目标服务器 例如 XMP
  • ejabberd如何编译新模块

    Here http www ejabberd im node 2872我找到了代码 erlc I ejabberd 2 1 13 lib ejabberd 2 1 13 include pa ejabberd 2 1 13 lib ejab
  • XMPP 服务器的 libxml2 与 expat

    我正在尝试从头开始创建一个 XMPP 库 以及后来的服务器 Go http golang org 尽管语言本身无关紧要 作为学习 XMPP 协议和服务器软件开发一般知识的一种手段 正如许多人所知 XMPP 是基于 XML 的消息传递协议 它
  • 送达收据请求不适用于 XMPP Android (aSmack)

    我正在使用 OpenFire 和 aSmack 我似乎无法让 送货收据 正常工作 创建连接时我执行以下操作 create connection connection login username password DeliveryRecei
  • ejabberd 支持离线文件传输吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在开发 XMPP 客户端 使用 ejabberd 作为服务器 我的问题是如何支持离线文件传输 我只想对图像文件进行离线文件传输 例如 即使约翰离线
  • 无法向 openfire 服务器发送消息

    我无法使用 SMACK API 向 openfire 服务器上的 XMPP 客户端发送消息 我不确定我哪里出错了 我在 gtalk 上测试了相同的代码 它工作正常 public class SenderTest public static
  • 如何通过 BOSH 使用 XMPP

    所以我对 BOSH 到底是什么有点困惑 这是一种使用http与XMPP服务器交互的方式吗 例如 openfire 使用 BOSHhttp domain com 7070 http bind http domain com 7070 http
  • Google Talk XMPP - 什么是 X-GOOGLE-TOKEN?

    我正在尝试向 Google Talk 进行身份验证 这X OAUTH2使用 OAuth2 令牌的机制是有据可查 https developers google com talk jep extensions oauth 但什么是X GOOG
  • 如何使用 Smack API 通过 AccountManager 的身份验证令牌向 Google Talk 进行身份验证?

    这个问题类似于 使用 authToken 对 Google Talk XMPP Smack 进行身份验证 https stackoverflow com questions 6194899 authenticate to google ta
  • Node.js 上的 starttls > 0.4.0

    我遇到了这个线程Node js HTTPS 安全错误 https stackoverflow com questions 5136353 node js https secure error其中提到 tls 模块是现在在节点上执行 TLS
  • ejabberd:运行安装后脚本时出错

    我正在尝试安装ejabberd在我的电脑上 但我不断收到此错误 Error running Post Install Script The installation may not have completed correctly ejab

随机推荐

  • 如何阻止 Python 的 Requests 库去除转义字符?

    我收到一个如下所示的 JSON 块 为简洁起见进行了编辑 actions script inputs
  • 如何用CSS相对对齐文本?

    我寻求对齐等号在我的方程中 我尝试了 span 和 div 但对齐结束于内容大小 gt RHS https jsfiddle net gytmx256 6 https jsfiddle net gytmx256 6 span class c
  • 如何使用 Retrofit 2 处理空响应正文?

    最近我开始使用 Retrofit 2 并且遇到了解析空响应正文的问题 我有一个仅使用 http 代码响应的服务器 响应正文中没有任何内容 如何仅处理有关服务器响应的元信息 标头 状态代码等 Edit 正如杰克 沃顿指出的那样 GET pat
  • 对于旧版浏览器,Azure 应用服务中的 HTTP/2 是否会自动回退到 HTTP/1.1

    我想为 Azure 应用服务托管的 Web 应用程序启用 HTTP 2 但是 我的用户中有 1 使用不支持 HTTP 2 的浏览器 即使我打开了 HTTP 2 Azure 应用服务是否会自动回退到这些浏览器的 HTTP 1 1 换句话说 当
  • 使用 JavaScript 关闭 Elementor 弹出窗口

    我有一个使用 Elementor 创建的弹出窗口 打开时会播放视频 我试图让它在视频结束后关闭 比如 90 秒 但我找不到如何使用 Javascript 关闭元素或弹出窗口 我尝试过这样的事情https github com element
  • 在“RKObjectManager”类型的对象上找不到属性“managementObjectStore”

    我一直在尝试使用 Restkit 库的 0 20 3 版本 最近发生了一个错误 我不知道如何解决 其内容如下 在该类型的对象上找不到属性 managementObjectStore RKObjectManager 它发生在包含 object
  • 如何使用 Xcode 4.3 或应用程序加载器将应用程序提交到 App Store

    我的第一个 iOS 应用程序在 iTunes Connect 中处于 等待上传 状态 但由于应用程序加载器中的 Xcode 4 3 遇到问题 我无法将其提交到 App Store 在 Xcode 4 3 中我有 3 个配置文件 临时配置文件
  • 右表中结果为空的内连接

    我有2张桌子 餐厅和订单 每个餐厅可以有很多订单 restaurants table id name orders table id restaurant id date 我需要找到在某个日期范围内没有订单的餐厅 在订单表中 我保存订单日期
  • 变量切换方向丢失

    我是安卓新手 我编写了几个程序并在手机上试用了它们 当我切换方向时 就像我的手机重新启动程序一样 我所有的变量都被重置 事实上 唯一没有重置的是编辑文本视图中的文本 这是什么原因造成的 我怎样才能阻止它 我尝试在谷歌和堆栈溢出上查看它 但我
  • CSS calc 在 Safari 和后备中不起作用

    我正在研究这个布局 它强烈依赖 CSS calc 来进行必要的计算 width webkit calc 50 20px width moz calc 50 20px width calc 50 20px 现在 我无法让它在 Safari 中
  • NHibernate、代理和平等

    我正在使用 NHibernate 3 3 1 并发现非常有趣的问题 在我的域模型中 我定义了两个类 Carriage 和 CarriageRequest 相互引用 因为延迟加载已打开 所以当我访问carriage CarriageReque
  • 在 .NET Core 中自动创建私钥、CSR 和最终签名证书的过程

    有人向我提供了中间证书 由根证书签名 及其密码 为了安全地连接到 SSL 端点 我需要提供签名证书 这是我所做的 创建私钥 使用该私钥创建 CSR 使用提供的中级证书对其进行签名 我使用 openssl 来完成这一切 它运行得非常完美 TL
  • 服务中的断点不起作用

    我正在尝试向在单独线程上运行的服务添加断点 无论我将断点放置在服务中的哪个位置 它们总是被忽略 我确信该服务正在运行 正如我所看到的Log e在日志猫中 我的调试模式也可以正确使用 因为应用程序主线程中的任何断点都可以工作 我错过了什么吗
  • 从 Django 内部调用时,Subprocess.Popen 与交互式程序一起挂起

    我编写了一个小型 Django 应用程序 它根据用户输入执行交互式程序并将输出作为结果返回 但由于某种原因 子进程挂起 在验证日志时 我发现必须给出 n 作为对挑战的响应的地方 该响应似乎从未做出过 有趣的是 如果我从 Django 外部运
  • Hibernate 锁定模式/锁定选项

    我正在浏览 Hibernate 文档并遇到了LockModes 这些是否与Isolation levels我们用于数据库 它们有何不同Isolation levels 我正在尝试一个简单的示例 并观察到当我使用 session load 方
  • 从 makefile 调用 flex

    我想调用 flex 来构建一个 l 文件 然后调用 gcc 来构建所有内容 I tryed comp lex scanner l gcc o a out main c hash c I error lex scanner l gcc o a
  • 如何开始黑莓编程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 编码文件路径

    net 中是否有内置方法可以像编码 url 一样对文件路径进行编码 例如 如果我的文件名中有非法字符 例如 whatever whatever 我希望它对 进行编码 这样它仍然存在 只是进行编码以便系统接受它 我想做类似的事情Path En
  • php,while()循环中的无限循环

    infinite loop x 1 while x 9 echo x x 我不明白背后的原因 为什么上面的代码会导致无限循环 在我看来 上面的代码应该输出 9 一次 但它输出无穷无尽的999999999 首先 当 x 等于 1 时 whil
  • Smack 的 FileTransferManager.createOutgoingFileTransfer 仅接受完整的 JID。如何在 Smack 中确定用户的完整 JID?

    经过几个小时的调试并试图找出为什么使用 aSmack 无法进行文件传输 而正常的消息传递却可以 我终于设法将其确定为这一点 当我按照 Smack 文档中给出的方法获取用户的名册列表时 Openfire 服务器发送的名册 JID 末尾缺少 C