Smack文档(翻译)
Contents:
- 概要
- 入门指南
- 管理连接
- 信息基础
- 角色与状态
- 处理数据包
- 服务架构
- 包属性
- 调试Smack
- 隐匿
- Smack扩展手册
概要:
Smack 是一个与XMPP服务器进行实时通讯的客户端库,包括即时信息与聊天组。
Smack优势:
- 易于使用,且功能强大的API。与用户通讯可以在只有几行代码
-
Connection connection = new XMPPConnection("jabber.org"); connection.connect(); connection.login("mtucker", "password"); Chat chat = connection.getChatManager().createChat("jsmith@jivesoftware.com", new MessageListener() { public void processMessage(Chat chat, Message message) { System.out.println("Received message: " + message); } }); chat.sendMessage("Howdy!");
- 像其他类库中一样,不强迫你在包中编码,提供了更智能的结构如 Chat 与 Roster类,让你的程序更有效。
- 不需要你熟悉XML格式
-
提供简单的点对点通信。Smack可以在每个消息中设置一些的属性,包括属性,对象。
-
开放源码,这意味着你可以将它用到你的商业或非商业应用中。
关于XMPP
XMPP(可扩展消息存在协议)是一个开放的协议标准,并支持和扩展的协议标准基础((译://www.xmpp的。)。
如何使用本文档
假设你已经熟悉即时通讯的主要特点。那么也强烈建议你打开文档程序指南和使用作为参考,通过阅读本文档。
入门指南:
本文档将向你介绍和提供了一个重要的类别和概念
所需的JAR文件
Smack可以很方便的在JDK1.5或更高版本的应用中使用,它不依赖外部包(除语音聊天),并且尽可能小,库文件提供更多的灵活性和功能应用要求:
- smack.jar -- 提供核心的功能,是必须的库。所有的功能的一部分,包括协议。
- smackx.jar --在标准基础上支持更多的扩展(xeps)定义,包括多用户聊天,文件传输,用户搜索,等扩展记录。
- smackx-debug.jar --增强的图形用户界面的调试协议。当启用了调试,它会自动发现路径。
建立一个连接
该xmppconnection类是用来创建一个到服务器连接。下面是示例代码:
// Create a connection to the jabber.org server. Connection conn1 = new XMPPConnection("jabber.org"); conn1.connect(); // Create a connection to the jabber.org server on a specific port. ConnectionConfiguration config = new ConnectionConfiguration("jabber.org", 5222); Connection conn2 = new XMPPConnection(config); conn2.connect();
注意,使用到服务器的默认安全连接连接(可能时),包括使用协议加密。该connectionconfiguration类提供了先进的控制建立连接与连接管理详细,如能够禁用或要求加密。
一旦创建了连接,你可以使用用户名和密码登陆连接。登录(字符串用户名,密码)方法。一旦登录后,你可以与其他用户创建的对象或群聊天。
名册Roster工作
Roster可以让你跟踪存在的其他用户。用户可以组织成组如“朋友”和“同事”,然后你可以发现每个用户是否在线或离线。
getroster()方法获得名册连接。Roster类可以让你找到所有Roster实体,他们所属的群体,和目前每个实体的存在状态。
读取和写入数据包
每个到XMPP服务器的消息从客户端被称为数据包和发送数据。org.jivesoftware.smack.packet包中包含封装的三种不同的基本类型所允许的类(message, presence, and IQ),
聊天、群聊等,提供了更高层次的结构,自动管理创建和发送数据,你也可以直接创建和发送数据包。下面是一个代码示例来改变你的存在,让人们知道不可用与离线。
// Create a new presence. Pass in false to indicate we're unavailable. Presence presence = new Presence(Presence.Type.unavailable); presence.setStatus("Gone fishing"); // Send the packet (assume we have a Connection instance called "con"). con.sendPacket(presence);
Smack提供2种不同方式读取传入的数据包,PacketListener, PacketCollector,以及packetfilter的使用情况,确定哪些数据包应处理。一个数据包侦听器在不同的编程中使用。你可以投递和禁止操作结果队列中的信息包收集器。因此,当传递信息包或者等待特定的数据包,包收集器也是非常有用的 。包监听器以及收集器可以在一个连接中被创建。
管理连接:
org.jivesoftware.smack.Connection 类提供了到XMPP服务器的连接管理。默认实现的是 org.jivesoftware.smack.XMPPConnection类.有2个主要构造函数,一个是XMPPConnection(String)
连接参数为服务器名称。将使用所有默认连接设置:
- DNS查找到确切的服务器驻留地址和端口(一般为5222)
-
如果有必要,设置服务器协商协议,包括加密的安全性,但连接将回到较低的安全设置。
- 名为"Smack" 的XMPP 资源将用于连接。
另外,您可以使用xmppserver(connectionconfiguration)构造函数指定连接设置。这些设置包括:
-
手动指定服务器地址和端口的服务器,而不是使用DNS查找。
- 启用连接压缩
-
自定义安全设置,如标记连接要求和加密连接点。
- 指定一个连接资源名称如 "Work" 或 "Home".每个到服务器连接的用户必须有一个独特的资源名称。. 用户 "jsmith@example.com", 详细资源地址可能是"jsmith@example.com/Smack". 作为唯一的资源名,用户可以从多个地点或使用多个设备,登录到服务器。优先级值与每个资源将确定哪些特定的连接接收邮件地址("jsmith@example.com" 在例子中).
连接和断开
// Create the configuration for this new connection ConnectionConfiguration config = new ConnectionConfiguration("jabber.org", 5222); config.setCompressionEnabled(true); config.setSASLAuthenticationEnabled(true); Connection connection = new XMPPConnection(config); // Connect to the server connection.connect(); // Log into the server connection.login("username", "password", "SomeResource"); .... // Disconnect from the server connection.disconnect();
使用 ConnectionConfiguration#setReconnectionAllowed(boolean) 来开关这种特性,将默认重新尝试连接以防突然断开。重新连接管理将立刻连接到服务器和在尝试连接失败时增加延迟。
如果你想重新等待下一个连接,你可以使用 Connection#connect()一个新的尝试将被建立。如果手动尝试也没有用,那么连接管理器将继续连接工作。
信息基础:
即时通讯的核心是来回发送消息,虽然个别邮件可以来回发送消息包,但一般容易处理的字符串信息聊天是使用org.jivesoftware.smack.chat类。
Chat
一个聊天对应创建新线程的消息(使用一个线程ID)。下面的代码段演示如何创建一个新的用户聊天,然后发送文本消息:
// Assume we've created a Connection name "connection". ChatManager chatmanager = connection.getChatManager(); Chat newChat = chatmanager.createChat("jsmith@jivesoftware.com", new MessageListener() { public void processMessage(Chat chat, Message message) { System.out.println("Received message: " + message); } }); try { newChat.sendMessage("Howdy!"); } catch (XMPPException e) { System.out.println("Error Delivering block"); }
Chat。发(字符串)方法是一种方便的方法,创建一个消息对象,设置body使用字符串参数来发送消息,在这种情况下,使用Chat.createMessage() 与 Chat.sendMessage(Message) 方法,如下面的代码片段:
Message newMessage = new Message();
newMessage.setBody("Howdy!");
message.setProperty("favoriteColor", "red");
newChat.sendMessage(newMessage);
上面的例子中,我们指定一个messagelistener当创建一个Chat。监听器随时更新聊天记录,下面代码使用一个监听器作为parrot-bo
// Assume a MessageListener we've setup with a chat. public void processMessage(Chat chat, Message message) { // Send back the same text the other user sent us. chat.sendMessage(message.getBody()); }
Incoming Chat
聊天是由另一个用户发起,你开始接收聊天讯息,如不是显式创建一个聊天或发送邮件,您需要创建并注册chatmanager chat实例。
该chatmanager已经找到一个匹配的聊天(线程ID),如果不存在它将创建一个新的来匹配。这个新的Chat你必须注册并通知它,你可以注册消息监听器来接受信息并处理。
// Assume we've created a Connection name "connection". ChatManager chatmanager = connection.getChatManager().addChatListener( new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean createdLocally) { if (!createdLocally) chat.addMessageListener(new MyNewMessageListener());; } });
除了基于线程的聊天信息,有一些客户不发送一个线程的一部分,处理这种情况,正好将尝试匹配传入的消息,找到最适合现有的Chat,基于JID。它会尝试找到一个相同的全JID,如果没有找到,则会使用基本的JID,如果没有发现新的,用户可以创建新的Chat.
角色与状态:
相关推荐
**Smack 4.1.x 完整依赖包详解** Smack 是一个开源的 Java 库,用于在 XMPP(可扩展消息处理即时协议)网络上实现即时通讯。这个库适用于 Android 平台,允许开发者构建高效、可靠的聊天应用程序。在 `smack4.1.x` ...
3. **集成 Smack**:在客户端应用中添加 Smack 4.x 库,创建连接配置,并使用 WebSocket 作为传输协议。 4. **连接 Openfire**:使用 Smack 创建连接对象,连接到 Openfire 服务器。 5. **消息收发**:实现消息监听...
Smack的各个版本可能会有不同的API变动和功能更新,4.x系列是其较新的稳定版本,包含了各种核心库以及可能需要的扩展模块。这些依赖包确保了Smack能够正常运行并支持其全部功能。 描述中提到的“官方下载的依赖包...
Smack是一个开源的Java库,专门用于实现XMPP(可扩展消息传递和 Presence 协议),这是一种基于XML的协议,广泛用于即时通讯和在线...然而,由于安全性和功能性的提升,建议在新项目中使用更新的Smack版本,如4.x系列。
**Smack文档中文版** **概述** ...总的来说,Smack文档中文版是开发者深入理解和使用Smack库的重要参考资料,它涵盖了XMPP通信的基本概念、Smack的API用法以及源码分析,有助于快速构建实时通信应用。
Smack是Java平台上的XMPP客户端库,提供了丰富的API接口,可以方便地构建XMPP应用。XMPP是一种开放的即时通讯标准,广泛应用于各种聊天、协作软件。Openfire是一款基于XMPP的服务器,可以与Smack很好地配合,实现...
解压smack_4_3_0.zip后,开发者可以使用其中的API来构建与Openfire或其他XMPP服务器交互的客户端应用。Smack提供了连接管理、会话建立、消息发送与接收、用户状态管理、多用户聊天室等功能。它的API设计直观,使得...
4. **XML解析器**:如stax-api.jar和woodstox-core-asl.jar,它们提供了XML流解析器,对于处理XMPP的XML数据至关重要。 5. **Push Notifications**:如果要处理服务器推送的通知,可能需要额外的jar包,如google-...
基于samck官方最新文档翻译而成,适用于最新的Smack4.x 简介 6月毕业后来到帝都上班,找了一份Android开发的工作,公司开发的APP需要使用XMPP和Smack进行即时聊天,服务端和IOS平台都已经投入使用,目前在捣鼓...
6. **扩展协议(XEPs)**:Smack 4.1对多种XEP(XMPP Extension Protocols)提供支持,如XEP-0199(XMPP Ping)、XEP-0085(Chat State Notifications)和XEP-0045(Multi-User Chat)。这使得开发者可以轻松实现...
而Smack提供了丰富的API,允许开发者实现这些功能。例如,通过`Roster`类管理好友列表,使用`ServiceDiscoveryManager`查找服务器上的服务,或利用`FileTransferManager`进行文件传输。 总的来说,Openfire与Smack...
它支持多种平台,包括Windows、Linux和Mac OS X。Openfire提供了丰富的功能,如用户管理、群聊、文件传输等,是开发即时通讯应用的理想选择。版本3.10.2是Openfire的一个稳定版本,具备良好的兼容性和安全性。 **...
Smack是一个用Java编写的XMPP库,提供了丰富的API来处理连接、聊天、用户认证、联系人管理和消息加密等功能。Openfire则是一个流行的XMPP服务器,它可以配合Smack一起使用,提供后台服务支持。 以下是一个使用Smack...
2. **SMACK版本**:文件名中的"smack_src_3_3_0"表明这是SMACK的3.3.0版本。在不同的版本中,SMACK可能增加了新功能、优化了性能或者修复了已知问题。了解特定版本的功能和API是开发的关键。 3. **核心组件**:...
在实际开发中,开发者通常会使用ejabberd的API或客户端库(如Smack, Strophe.js等)来构建XMPP应用。通过编写XMPP协议的XML stanza,实现消息发送、接收、用户注册、登录等功能。此外,ejabberd也支持插件开发,允许...
虽然现在更常见的是使用fetch API,它提供了更现代且易于使用的接口。 ```javascript fetch('game_state.json') .then(response => response.json()) .then(data => { // 更新游戏状态 }); ``` 总的来说,...
- **丰富的 API**:提供了易于使用的 API,简化了开发者与 XMPP 服务器的交互过程。 - **连接管理**:支持多种连接方式,包括 TCP、SSL/TLS、WebSocket 等。 - **身份验证**:支持 SASL 认证机制,增强了安全性。 - ...
- 主要组件包括:Jabber服务器(如ejabberd、Openfire)、客户端库(如Smack、Strophe)和协议扩展(如XEPs)。 2. **Java与XMPP**: - Java在实现XMPP聊天室中的角色主要是通过提供API来处理与XMPP服务器的交互...
4. `org.jivesoftware.smackx`: 这个目录扩展了基本的Smack功能,提供了更丰富的XMPP特性支持,如多用户聊天(MUC)、扩展信息(XEPs)、文件传输、自定义IQ包等。例如,`MUCClient`用于参与多用户聊天室,`DataForm...
3. **Jabber客户端开发**:详细讲解如何使用Java API,如Smack库,来创建和管理Jabber客户端。这包括连接、认证、发送和接收消息、建立多用户聊天室、管理联系人列表等功能。 4. **高级特性**:可能涉及高级功能,...