Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xmpp 如何开始与bonjour客户的对话name@host:港口?_Xmpp_P2p_Sip_Bonjour_Ichat - Fatal编程技术网

Xmpp 如何开始与bonjour客户的对话name@host:港口?

Xmpp 如何开始与bonjour客户的对话name@host:港口?,xmpp,p2p,sip,bonjour,ichat,Xmpp,P2p,Sip,Bonjour,Ichat,我正在从事一个P2P即时通讯的项目,比如ichat,但只针对局域网。 我使用jmdns库进行服务发现,并使用pidgin进行测试,然后作为Bonjour用户登录。到目前为止,该服务仍然存在。发现得很好, 然后我们知道用户在局域网中的信息,就像name@host:端口,那么如何启动与Bonjour客户端的对话? 我查看了XMPP,但它不支持P2P,但我几乎找不到支持P2P的扩展叮当的库 也许我应该用SIP来交谈?但是包格式与Bonjour兼容吗?或者我必须研究交换的数据包的结构? 有人能解释一下i


我正在从事一个P2P即时通讯的项目,比如ichat,但只针对局域网。
我使用jmdns库进行服务发现,并使用pidgin进行测试,然后作为Bonjour用户登录。到目前为止,该服务仍然存在。发现得很好,
然后我们知道用户在局域网中的信息,就像name@host:端口,那么如何启动与Bonjour客户端的对话?
我查看了XMPP,但它不支持P2P,但我几乎找不到支持P2P的扩展叮当的库
也许我应该用SIP来交谈?但是包格式与Bonjour兼容吗?或者我必须研究交换的数据包的结构?
有人能解释一下ichat是如何为LAN工作的吗?

非常感谢你的帮助!
我想你有点困惑了

Bonjour是一种查找服务的机制。它不是用于与服务通信的。一旦你找到了name@host:端口信息,您好

下一步将要求您谈论服务理解的协议。服务字符串中的令牌
\u presence
表示这是一个XMPP服务。你需要和它谈谈XMPP。你不能和它说话。您是否尝试打开到找到的主机和端口的XMPP连接

你说的是啜饮和叮当声。这些用于设置音频或视频通话。如果您正在编写即时消息程序,则无需执行此操作。单靠XMPP就足够了

如果您确实希望支持音频或视频,那么您将需要这些协议之一。因为您找到的服务是XMPP服务,所以您需要使用叮当声。如果你没有一个能说叮当声的库,你就必须自己编写代码。Bonjour信息中没有标识SIP服务的内容,因此您不能使用SIP,除非您可以进行不同的Bonjour查询并找到SIP服务


我推断你在用Java工作。最流行的Java XMPP库似乎是。

您可以使用SIP来实现这一点。MDN将是您的发现机制,然后您将使用普通SIP进行调用,即您了解了希望拨打的URI

SIPSIMPLE SDK(http://sipsimpleclient.com)通过使用这个过期的草稿来实现这个特性:这可能是一个好的开始


基本上,您的客户机将生成一个类似sip:random的URI_stuff@ip:端口,然后使用MDN将其与显示名称一起发布。该应用程序还可以在局域网上浏览MDN中的对等方:_sipuri._udp等。一旦你得到一些URI,你就可以使用SIP拨号。

谢谢大家的关注,现在我发现了一些东西。XMPP不支持P2P模式,只支持客户端-服务器客户端。但还有另一个标准“XEP-0174:无服务器消息传递”,它适用于本地网络中的p2p聊天。DNS-SD+XEP-0174,ichat就是这样工作的。
因为我使用了smack库,它不支持p2P;但是有人做了一些改变,这里是链接 .

我没有尝试这个XMPPLLConnection,我已经研究了smack的源代码,它是基于套接字连接的。不幸的是,XEP-1074没有任何java库,所以我必须在socket上处理xml流

你说打开一个XMPP连接,是的,这个问题让我困惑!怎样?使用套接字连接或任何使我不关心数据包格式的合适库?谢谢你的回答!哦,对了。我已经添加了一个名为Smack的库的链接,它应该可以帮助您。谢谢,但事实上我已经研究了Smack,我知道我们可以在服务器的帮助下开始与其他人的对话。但是现在我没有服务器,它是p2p的,所以smack可以在没有服务器的情况下完成这项工作吗?我再次研究了smack,似乎客户端登录了服务并设置了可用的状态。所以服务器是必要的。我试图更改connectionconfiguration,但smack似乎不支持两个客户端之间的直接互连。我知道smack也有一个版本的叮当声,但我找不到任何关于它的演示。也许我得研究一下数据包的格式?