`
wenqxin
  • 浏览: 14147 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

smack3.x API

 
阅读更多

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!");
    复制代码
    复制代码
  • 像其他类库中一样,不强迫你在包中编码,提供了更智能的结构如 ChatRoster类,让你的程序更有效。
  • 不需要你熟悉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)。下面的代码段演示如何创建一个新的用户聊天,然后发送文本消息:

复制代码
View Code
// 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.

角色与状态:

 







 

 

 

 

 

分享到:
评论

相关推荐

    smack4.1.x的完整依赖包

    **Smack 4.1.x 完整依赖包详解** Smack 是一个开源的 Java 库,用于在 XMPP(可扩展消息处理即时协议)网络上实现即时通讯。这个库适用于 Android 平台,允许开发者构建高效、可靠的聊天应用程序。在 `smack4.1.x` ...

    openfire+smack 4.x+websocket的消息推送服务

    3. **集成 Smack**:在客户端应用中添加 Smack 4.x 库,创建连接配置,并使用 WebSocket 作为传输协议。 4. **连接 Openfire**:使用 Smack 创建连接对象,连接到 Openfire 服务器。 5. **消息收发**:实现消息监听...

    smack4.*所有官方、非官方的依赖包,有这些依赖包可以确保启动。

    Smack的各个版本可能会有不同的API变动和功能更新,4.x系列是其较新的稳定版本,包含了各种核心库以及可能需要的扩展模块。这些依赖包确保了Smack能够正常运行并支持其全部功能。 描述中提到的“官方下载的依赖包...

    smack2.2中文API

    Smack是一个开源的Java库,专门用于实现XMPP(可扩展消息传递和 Presence 协议),这是一种基于XML的协议,广泛用于即时通讯和在线...然而,由于安全性和功能性的提升,建议在新项目中使用更新的Smack版本,如4.x系列。

    Smack文档中文版

    **Smack文档中文版** **概述** ...总的来说,Smack文档中文版是开发者深入理解和使用Smack库的重要参考资料,它涵盖了XMPP通信的基本概念、Smack的API用法以及源码分析,有助于快速构建实时通信应用。

    Android smack 接收 发送消息 表情发送

    Smack是Java平台上的XMPP客户端库,提供了丰富的API接口,可以方便地构建XMPP应用。XMPP是一种开放的即时通讯标准,广泛应用于各种聊天、协作软件。Openfire是一款基于XMPP的服务器,可以与Smack很好地配合,实现...

    Openfire 4.2.3+Smack 4.3.0最新安装包

    解压smack_4_3_0.zip后,开发者可以使用其中的API来构建与Openfire或其他XMPP服务器交互的客户端应用。Smack提供了连接管理、会话建立、消息发送与接收、用户状态管理、多用户聊天室等功能。它的API设计直观,使得...

    Smack4的一些依赖jar包(包括官方提供,和官方不提供但是必须的)

    4. **XML解析器**:如stax-api.jar和woodstox-core-asl.jar,它们提供了XML流解析器,对于处理XMPP的XML数据至关重要。 5. **Push Notifications**:如果要处理服务器推送的通知,可能需要额外的jar包,如google-...

    smack4-doc-zh:smack4 中文文档

    基于samck官方最新文档翻译而成,适用于最新的Smack4.x 简介 6月毕业后来到帝都上班,找了一份Android开发的工作,公司开发的APP需要使用XMPP和Smack进行即时聊天,服务端和IOS平台都已经投入使用,目前在捣鼓...

    Smack4.1demo

    6. **扩展协议(XEPs)**:Smack 4.1对多种XEP(XMPP Extension Protocols)提供支持,如XEP-0199(XMPP Ping)、XEP-0085(Chat State Notifications)和XEP-0045(Multi-User Chat)。这使得开发者可以轻松实现...

    Openfire即时通讯服务搭建与Smack访问

    而Smack提供了丰富的API,允许开发者实现这些功能。例如,通过`Roster`类管理好友列表,使用`ServiceDiscoveryManager`查找服务器上的服务,或利用`FileTransferManager`进行文件传输。 总的来说,Openfire与Smack...

    基于Smack3.0.4+ Openfire3.10.2开发之Android 客户端之三

    它支持多种平台,包括Windows、Linux和Mac OS X。Openfire提供了丰富的功能,如用户管理、群聊、文件传输等,是开发即时通讯应用的理想选择。版本3.10.2是Openfire的一个稳定版本,具备良好的兼容性和安全性。 **...

    Android中基于XMPP协议实现IM聊天程序与多人聊天室

    Smack是一个用Java编写的XMPP库,提供了丰富的API来处理连接、聊天、用户认证、联系人管理和消息加密等功能。Openfire则是一个流行的XMPP服务器,它可以配合Smack一起使用,提供后台服务支持。 以下是一个使用Smack...

    xmpp客户端协议实现源代码

    2. **SMACK版本**:文件名中的"smack_src_3_3_0"表明这是SMACK的3.3.0版本。在不同的版本中,SMACK可能增加了新功能、优化了性能或者修复了已知问题。了解特定版本的功能和API是开发的关键。 3. **核心组件**:...

    ejabberd-15.07-osx-installer.app.zip

    在实际开发中,开发者通常会使用ejabberd的API或客户端库(如Smack, Strophe.js等)来构建XMPP应用。通过编写XMPP协议的XML stanza,实现消息发送、接收、用户注册、登录等功能。此外,ejabberd也支持插件开发,允许...

    smack_the_cockroach

    虽然现在更常见的是使用fetch API,它提供了更现代且易于使用的接口。 ```javascript fetch('game_state.json') .then(response => response.json()) .then(data => { // 更新游戏状态 }); ``` 总的来说,...

    A modular and portable open source XMPP client library wri.zip

    - **丰富的 API**:提供了易于使用的 API,简化了开发者与 XMPP 服务器的交互过程。 - **连接管理**:支持多种连接方式,包括 TCP、SSL/TLS、WebSocket 等。 - **身份验证**:支持 SASL 认证机制,增强了安全性。 - ...

    xmpp聊天室

    - 主要组件包括:Jabber服务器(如ejabberd、Openfire)、客户端库(如Smack、Strophe)和协议扩展(如XEPs)。 2. **Java与XMPP**: - Java在实现XMPP聊天室中的角色主要是通过提供API来处理与XMPP服务器的交互...

    asmack源码

    4. `org.jivesoftware.smackx`: 这个目录扩展了基本的Smack功能,提供了更丰富的XMPP特性支持,如多用户聊天(MUC)、扩展信息(XEPs)、文件传输、自定义IQ包等。例如,`MUCClient`用于参与多用户聊天室,`DataForm...

    jabber protocol in java

    3. **Jabber客户端开发**:详细讲解如何使用Java API,如Smack库,来创建和管理Jabber客户端。这包括连接、认证、发送和接收消息、建立多用户聊天室、管理联系人列表等功能。 4. **高级特性**:可能涉及高级功能,...

Global site tag (gtag.js) - Google Analytics