- 浏览: 454414 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
进退取舍:
谢谢,这个用上了!!
Java 一个线程池的示例 -
pb_water:
感谢楼主,打算买楼主的书,支持一下,楼主功德无量
JavaScript内核系列第0版整理稿下载 -
lancezhcj:
有图会直观的多呢,再摸索摸索
有限自动机与建模 -
hsmsyy:
这里应该是原创了吧,楼主我觉得闭包的作用:实现面向对象。有待商 ...
JavaScript内核系列 第7章 闭包 -
wll52:
在应用退出之前,需要释放连接 con.disconnect() ...
使用smack与GTalk通信
前言
前两天无意中发现了smack(火星了,如果你比我还火星,请参看此处:http://www.igniterealtime.org/downloads/index.jsp ),在网上也看到了几个例子,于是想用Swing将其包装一下,做一个简单的gtalk客户端,一来时间有限,而来自己对Swing的熟悉程度不够,代码就不贴出来现眼了,大概说下smack的API,先看下图:
主界面,显示contact list
与ping.fm机器人聊天,发布twitter消息。
消息发送成功。
Smack是纯JAVA对XMPP(jabber)的一个实现,不但实现了XMPP的标准通信协议,而且提供了好多个扩展,如文件传输等,XMPP是一个扩展性极强的协议,GTalk就是基于XMPP服务的,也就是说,Smack不但可以与GTalk通信,其他所有的XMPP(jabber)服务都是可以的。好了,我们下边具体看下代码:
建立连接
首先当然是建立与gtalk服务器的连接,smack的API封装的非常漂亮,很简洁:
ConnectionConfiguration conf = new ConnectionConfiguration(
"talk.google.com",
5222,
"gmail.com");
conf.setSASLAuthenticationEnabled(false);//gtalk不支持SASL验证,设置为false
XMPPConnection con = new XMPPConnection(conf);
con.connect();
/*
* username : username@gmail.com, @符前边的字符为用户名
* password :
*/
con.login("username", "password");
获取好友列表
好友列表在smack中被封装成Roster(花名册)对象,是一个集合对象,其中可以注册监听器,当用户的状态信息发生改变的时候可以通知UI进行更新(比如,在线状态变成离线状态等)
Roster roster = con.getRoster(); roster.addRosterListener(new RosterListener(){ public void entriesAdded(Collection<String> addresses) {} public void entriesUpdated(Collection<String> addresses) {} public void entriesDeleted(Collection<String> addresses) {} public void presenceChanged(Presence presence) { System.out.println( "Presence changed: " + presence.getFrom() + ":" + presence.getStatus()+":"+ presence.getType()+":"+ presence.getMode()); } });
可以获取Roster中的每一个实体,来进行某些操作:
Collection<RosterEntry> entries = roster.getEntries(); for(RosterEntry entry : entries){ System.err.println( entry.getName()+":"+ entry.getUser()+":"+ entry.getType()+":"+ entry.getStatus() );//当然,除了打印出信息以外,还可以建立bean对象,来更新list的model。 System.err.println( "status~"+roster.getPresence(entry.getUser()).getType()); }
发送/接收消息
首先,从connection上获得ChatManager(聊天管理器),然后用管理器建立与指定用户的Chat session,然后就可以发送,接收消息了。
ChatManager chatManager = con.getChatManager(); Chat chat = chatManager.createChat( "kmustlinux@gmail.com", new MessageListener(){ public void processMessage(Chat chat, Message message) { System.err.println("Received Message : "+message.getBody()); } });
Chat的构造方法需要提供两个参数
- 要与之通信的用户名(这里需要写出该用户的全称,需要加上域名部分)
- 一个消息监听器,指定当消息到达时需要做的处理(比如更新接收消息的窗口,发出声音提示等)
通过chat对象,可以发送简单的字符串,也可以将字符串封装成Message对象,并在这个Message对象上加上一些附加属性进行传递。
Message message = new Message(); message.setBody("message string"); message.setProperty("attribute", "value"); chat.sendMessage(message);
在应用退出之前,需要释放连接
con.disconnect();
总结
通过例子可以看出,Smack的API相当清晰,而且必要的功能也都提供了。在测试过程中,发现Swing真的很好,API非常好用,可以很好的看出其中的MVC模式的运用,MVC不仅仅是框架级别的,而且细小到每一个控件中,同样适用。有时间了好好完善一下,通过使用XMPP的扩展,可以将其做成一个可用的工具出来,如语音,视频等的支持。
评论
这个如何在聊天一会儿之后退出释放。如做一个IM如何做到关闭浏览器后释放。
发表评论
-
JavaScript内核系列 第15章 服务器端的JavaScript
2012-02-12 21:39 2385第15章已经在icodeit上发布,这一章分为上/下两篇,请朋 ... -
使用vim开发python及graphviz绘图
2011-12-23 14:49 6494基本需求 使用vim中的autocmd命令可以很容易的将正在 ... -
Java脚本技术应用实例
2011-01-22 11:24 4312前言 一直以来都很喜欢可以自由扩展的软件,这一点应该已经在很 ... -
可编程计算器(phoc)的设计与实现
2011-01-17 11:34 2017前言 借助JavaScript脚本 ... -
函数式编程(javascirpt)
2009-04-18 22:18 1291前言 Javascript,有人称 ... -
C和指针
2009-05-21 23:15 1135前言 指针是C的灵魂,正是指针使得C存在了这么多年,而且将长 ... -
C和指针(续)
2009-05-25 23:41 1386前言 上一篇《C和指针》可能对关于C和指针的有些内容没有说透 ... -
有限自动机与建模
2009-06-06 10:48 1831前言 在学校学程序设计语言的时候,能接触到的所有例子没有一个 ... -
事件和监听器
2009-06-21 22:06 1456前言 事件监听器是经 ... -
基于总线的消息服务(BBMS)的设计与实现
2009-07-25 22:19 1372前言 异步事件的通知机制在比较有规模的软件设计中必然会有涉及 ... -
JavaScript内核系列 第9章 函数式的Javascript
2010-05-13 19:20 3817第九章 函数式的Javascript 要说Ja ... -
JavaScript内核系列 第8章 面向对象的JavaScript(下)
2010-05-06 09:40 3681接上篇:JavaScript内核系列 第8章 面向对象的Jav ... -
JavaScript内核系列 第8章 面向对象的JavaScript(上)
2010-05-06 09:26 2930第八章 面向对象的 Javascript ... -
JavaScript内核系列 第7章 闭包
2010-05-04 08:48 3931第七章 闭包 闭包向来给包括JavaScript程序 ... -
JavaScript内核系列 第6章 正则表达式
2010-04-27 19:44 4084第六章 正则表达式 正则表达式是对字符串的结构 ... -
JavaScript内核系列 第5章 数组
2010-04-24 15:17 4601第五章 数组 JavaScript的数组也是一个比较 ... -
Swing小应用(Todo-List)之三
2010-04-22 20:47 2149前言 去年9月份开发的那个小工具sTodo,只是做到了能用, ... -
JavaScript内核系列 第4章 函数
2010-04-18 17:31 5113第四章 函数 函数,在C语言之类的过程式语言中 ... -
JavaScript内核系列 第3章 对象与JSON
2010-04-12 09:12 6182第三章 对象与JSON JavaScript对象与传 ... -
JavaScript内核系列 第2章 基本概念
2010-04-03 19:44 5744第二章 基本概念 ...
相关推荐
1. 消息收发:GTalk客户端使用Smack库作为XMPP的实现,处理与服务器的连接和消息交换。源代码中可以学习到如何构建XML消息结构,以及如何处理各种类型的消息事件。 2. 状态更新与在线状态:GTalk支持用户设置在线、...
4. **Smack TCP Transport**: 用于建立与 XMPP 服务器的安全 TCP 连接,支持 TLS/SSL 加密,确保通信安全。 5. **Smack TLS**: 提供了 TLS/SSL 支持,用于加密和验证与服务器的连接。 6. **Smack Provider**: 解析...
使用Smack,你可以创建`XMPPTCPConnection`实例来建立与XMPP服务器的TCP连接,然后通过`Login`方法进行身份验证。一旦连接建立并登录成功,你可以使用`UserManager`类来查找或创建用户,`Roster`类来管理联系人,...
XMPP不仅用于传统的个人IM应用,如QQ、MSN Messenger和Gtalk(Gtalk是XMPP协议的实现),还可在企业环境中提升沟通效率,甚至在游戏中集成通信功能,增强用户体验。 Spark是一款基于XMPP的Java即时通讯客户端,它...
【标题】:“openfire+smack开发webim笔记...同时,Smack库简化了Java应用与XMPP服务器的交互。WebIM的实现方式多样化,包括Ajax、Pushlet、Comet等技术,而知名厂商的成功案例则为开发者提供了丰富的实践经验和参考。
Instant Messenger,即时通信软件,就是我们日常使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk就是基于XMPP协议的一个实现,而其他的则不是。当前IM几乎作为每个上网者必然使用的工具,在国外的大型企业中有一些...
Java GTalk机器人是一种使用Java编程语言开发的程序,它能够与Google Talk(简称Gtalk)聊天服务进行交互,实现自动化消息发送、接收以及各种自定义功能。Gtalk机器人通常是通过Google的Jabber协议实现的,这是一个...
IM,即时通讯,如QQ、MSN Messenger和Gtalk,是网络上广泛使用的通信工具,而Gtalk就是基于XMPP协议的实例。 Openfire是XMPP服务器的实现,用Java编写,提供基础的IM服务。它支持用户连接管理、消息路由和群组聊天...
本文将围绕“XMPP基础实现”这一主题,深入探讨使用Smack库来实现XMPP聊天工具的过程及其相关知识点。 一、XMPP协议简介 XMPP起初是为了替代早期的Jabber协议而设计的,它提供了丰富的架构,支持多种实时通信功能,...
根据提供的文件信息,我们可以...通过这些知识点的学习,读者可以了解到如何使用Java和Smack库开发基于XMPP协议的即时通讯应用,特别是针对GTalk的服务。此外,这些知识点也为进一步探索即时通讯领域的开发奠定了基础。
本文主要讲解在 Android 平台上使用 XMPP 协议实现即时通信,并详细介绍了 openfire、smack 和 spark 三个组件的作用。 一、XMPP 协议简介 XMPP 协议(Extensible Messaging and Presence Protocol)是一种基于 XML...
在实际开发过程中,你可能还会遇到一些常见的问题,如网络连接不稳定导致的断线重连、安全性问题(如使用SSL/TLS加密通信)以及性能优化等。对于这些问题,Asmack库通常都有相应的解决方案和最佳实践可供参考。 总...
文档中提到了asmack-jse.jar这个jar包,这是Smack库在Android环境下的一个版本,可以实现与服务器之间的连接和通信。开发人员可以利用这些库来开发XMPP客户端,并实现用户注册、登录、发送接收消息、获取好友状态等...
#### 六、使用Smack开发即时通信功能 - **环境搭建**:确保开发环境中安装了Java SDK,并配置好开发环境。 - **导入Smack库**:将Smack库加入到项目的类路径中。 - **编写代码**:使用Smack API进行用户注册、消息...
- **Smack**: 一个用于实现客户端即时通信功能的Java库,可通过它实现与Openfire的交互。 #### 第二章 安装Openfire 3.6.4 ##### 2.1 配置机器的域名 为了使Openfire能够在网络环境中正常工作,需要为服务器配置...
总之,Openfire结合XMPP协议、Apache MINA框架以及Spark和Smack等组件,构建了一套完整的即时通信解决方案,不仅支持基本的文本聊天,更具备高度的可扩展性和定制化能力,适用于多种应用场景,包括企业级通信、网络...
1. 数据传输基于广泛使用的XMPP协议,与其他如QQ、MSN、GTalk等即时通讯服务兼容。 2. 提供了良好的框架支持,简化了开发者实现推送通知的复杂度。 3. 利用MINA框架有效处理高并发连接,提高了系统效率。 4. 采用TLS...
#### 七、使用Smack开发即时通信功能 1. **集成Smack库**: - 在项目中引入Smack库,通过API实现与Openfire服务器的交互。 - 实现用户注册、登录、消息发送与接收等功能。 2. **扩展功能**: - 探索如何通过...
综上所述,通过了解XMPP的基本概念、Spark、Smack与Openfire的功能定位以及Apache MINA在网络通信中的角色,我们可以更好地理解如何构建一个完整且高效的即时通讯系统。同时,Openfire中的命名规则也有助于开发者更...