关键词:
【中文标题】java中如何通过Smack实现流管理?【英文标题】:how to implement Stream Management through Smack in java? 【发布时间】:2017-03-21 08:58:30 【问题描述】:如何使用 smack 4.1 中的 XEP 198(流管理)使用 java ,请分享一些参考。
我正在使用 java 代码将消息从 smack 发送到 spark
private static String username = "test";
private static String password = "test123";
public static class MessageParrot implements PacketListener
private XMPPConnection xmppConnection;
public MessageParrot(XMPPConnection conn)
xmppConnection = conn;
public void processPacket(Packet packet)
Message message = (Message)packet;
if(message.getBody() != null)
String fromName = StringUtils.parseBareAddress(message.getFrom());
System.out.println("Message from " + fromName + "\n" + message.getBody() + "\n");
Message reply = new Message();
reply.setTo(fromName);
reply.setBody("I am a Java bot. You said: " + message.getBody());
xmppConnection.sendPacket(reply);
public static void main(String[] args )
System.out.println("Starting IM client");
// gtalk requires this or your messages bounce back as errors
ConnectionConfiguration connConfig = new ConnectionConfiguration("domain.com", 5222);
XMPPConnection connection = new XMPPConnection(connConfig);
try
connection.connect();
System.out.println("Connected to " + connection.getHost());
catch (XMPPException ex)
//ex.printStackTrace();
System.out.println("Failed to connect to " + connection.getHost());
System.exit(1);
try
connection.login(username, password);
System.out.println("Logged in as " + connection.getUser());
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
catch (XMPPException ex)
//ex.printStackTrace();
// XMPPConnection only remember the username if login is succesful
// so we can''t use connection.getUser() unless we log in correctly
System.out.println("Failed to log in as " + username);
System.exit(1);
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new MessageParrot(connection), filter);
/* if(args.length > 0) */
// google bounces back the default message types, you must use chat
Message msg = new Message("test2@domain.com", Message.Type.chat);
msg.setBody("hi");
// msg.addExtension(new DeliveryReceipt(msg.getPacketID()));
/* XHTMLExtension xhtmlExtension = new XHTMLExtension();
xhtmlExtension.addBody(
"<body>My lord, dispatch; read o'er these articles.</body><request xmlns='urn:xmpp:receipts'/>");
msg.addExtension(xhtmlExtension);*/
/* MessageEventManager.addNotificationsRequests(msg, true, true, true, true);
DeliveryReceiptManager.addDeliveryReceiptRequest(msg);*/
connection.sendPacket(msg);
System.out.println("Press enter to disconnect\n");
try
System.in.read();
catch (IOException ex)
//ex.printStackTrace();
connection.disconnect();
通过这个我可以和两个客户端聊天,一个来自 smack,另一个来自 spark,如何在这里实现流管理?
【问题讨论】:
【参考方案1】:创建连接对象后使用下面的代码
connection.setUseStreamManagement(true);
connection.setUseStreamManagementResumptionDefault(true);
之后查看<enable xmlns='urn:xmpp:sm:3' resume='true'/>
的日志,这意味着客户端想要使用流管理。服务器将响应此(如果支持)<enabled xmlns='urn:xmpp:sm:3' id='.......' resume='true' max='1'/>
,这意味着流现已启用
完成后,如果您不断检查日志,您会发现 <r xmlns='urn:xmpp:sm:3'/>
和 <a xmlns='urn:xmpp:sm:3' h='1'/>
在客户端和服务器之间进行交换。
【讨论】:
java用smack实现简单地通过openfire与其他人进行聊天
import java.util.Objects;import org.jivesoftware.smack.AbstractXMPPConnection;import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;import org.jivesoftware.smack.chat. 查看详情
java示例代码_Smack+openfire-是否可以检查当前用户是否为管理员?/如何查看当前用户详细信息
java示例代码_Smack+openfire-是否可以检查当前用户是否为管理员?/如何查看当前用户详细信息 查看详情
在smack中阻止用户[关闭]
...序,我想从我的聊天列表中阻止特定的朋友。谁能告诉我如何通过smack库阻止特定用户。提前致谢。【问题讨论】:【参考方案1】:XMPP在XEP-16中定义隐私列表。Smack将XEP-16实现为PrivacyListManager。文档和示例代码可以在h 查看详情
gRPC Java 客户端能否通过长期存在的 gRPC 流并行发送多个请求以及如何管理 N 个流
...va客户端能否通过长期存在的gRPC流并行发送多个请求以及如何管理N个流【英文标题】:CangRPCJavaclientsendmultiplerequestsinparalleloveralonglivedgRPCstreamandhowtomanageNstreams【发布时间】:2021-11-1116:44:46【问题描述】:我正在使用“流式RPC”AP... 查看详情
在 Android Studio 上使用 Smack 构建 XML 流消息
...【发布时间】:2016-07-0320:34:27【问题描述】:我正在尝试通过Smack库验证我与Firebase-Cloud-Messaging的连接。我看到我的连接从google获得了一个streamId,因为我在我的AndroidStudioIDE上记录了这条 查看详情
如何在 Flutter 中管理对象列表流?
】如何在Flutter中管理对象列表流?【英文标题】:HowtomanageastreamofListofobjectsinFlutter?【发布时间】:2019-09-3007:58:14【问题描述】:我这几天一直在研究Flutter,我正在尝试制作一个简单的ToDo应用,作为一个学习项目。我正在尝试... 查看详情
如何使用 smack 和 java 从 jid 到 jid?
】如何使用smack和java从jid到jid?【英文标题】:howtogetfromjid&tojidusingsmackandjava?【发布时间】:2014-05-0304:44:27【问题描述】:通过使用下面的代码,我只能从userId获取,但不能从userId获取。publicvoidprocessMessage(Chatchat,Messagemessage)i... 查看详情
使用 EJABBERD-BUSINESS 版本在 SMACK 中恢复流后读取“重新绑定”数据包
】使用EJABBERD-BUSINESS版本在SMACK中恢复流后读取“重新绑定”数据包【英文标题】:Read\'Rebind\'PacketafterstreamresumptioninSMACKwithEJABBERD-BUSINESSEdition【发布时间】:2016-03-1015:10:15【问题描述】:我想阅读我发送到ejabberd-business版本服务... 查看详情
如何在 java 中使用 Smack XMPP 库处理 TLS 证书
】如何在java中使用SmackXMPP库处理TLS证书【英文标题】:HowtohandleTLScertificateusingSmackXMPPlibraryinjava【发布时间】:2011-04-1821:51:47【问题描述】:大家好。我刚刚开始在Java中使用XMPP,包括服务器端和客户端。在服务器端,我使用的... 查看详情
Smack 在 Java EE 中运行良好吗
...】:Smack在JavaEE中是否正常运行?我遇到了存在问题。我通过doPost方法从登录表单中获取凭据..我可以成功地进行身份验证以及connection.getRoster()也可以工作。接下来我只想显示在线的用户,这样当我得到用户的存在时,存在对象... 查看详情
java多线程通过管道流实现不同线程之间的通信
...数据到输出管道,另外一个线程从输入管道中读取数据。通过使用管道,实现不同线程间的通信,而不必借助类似临时文件之类的东西。jdk提供4个类来使线程建可以进行通信。(1)PipedInputStream与PipedOutputStream(2)PipedReader与PipedWriter&... 查看详情
如何使用 smack Java 获取 IQ 标签?
】如何使用smackJava获取IQ标签?【英文标题】:HowtogetIQtagusingsmackJava?【发布时间】:2012-03-1814:48:50【问题描述】:实际上,问题是当我的xmpp客户端发送朋友邀请,然后收件人已经批准邀请时,openfire服务器再次向发起者/邀请发... 查看详情
如何在 smack 中实现消息确认
】如何在smack中实现消息确认【英文标题】:HowtoimplementmessageAcknowledgementinsmack【发布时间】:2017-02-1505:06:34【问题描述】:我已经在我的android应用程序中成功实现了一对一聊天。现在我想知道我的消息是否已送达。我用谷歌搜... 查看详情
如何在 smack 中向 chatmanager 添加多个聊天?
】如何在smack中向chatmanager添加多个聊天?【英文标题】:Howtoaddmultiplechatstochatmanagerinsmack?【发布时间】:2014-05-0506:08:57【问题描述】:来自smack文档:聊天管理器跟踪对所有当前聊天的引用。它自己不会在内存中保存任何引用,... 查看详情
使用 Smack 删除帐户
...singSmack【发布时间】:2015-07-1907:35:20【问题描述】:我想通过Smack删除帐户。有method可以从服务器中删除当前登录的账号。但是当我使用管理员帐户登录时,我需要删除另一个帐户。我可以创建帐户:accountManager.createAccount(username... 查看详情
无法在 JAVA 中使用 SMACK api 显示收到的消息
...有一个发送按钮向用户Y发送消息。我已经检查了XMPP调试管理器, 查看详情
使用 smack 库的 android 头像管理
【中文标题】使用smack库的android头像管理【英文标题】:Avatarmanagementusingsmacklibraryforandroid【发布时间】:2015-10-1306:35:32【问题描述】:谁能告诉我在Android中使用Smack库进行头像管理的最佳方式?【问题讨论】:【参考方案1】:... 查看详情
java多线程-管道流实现线程间通信(代码片段)
...据到输出管道流,另一个线程从输入管道流中读取数据。通过使用管道,实现不同线程间的通信,而无须借助于类似临时文件之类的东西。字节流PipedInputStream和PipedOutputStream字符流PipedReader和Pip 查看详情