- 浏览: 444433 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
进退取舍:
谢谢,这个用上了!!
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 2206第15章已经在icodeit上发布,这一章分为上/下两篇,请朋 ... -
使用vim开发python及graphviz绘图
2011-12-23 14:49 6328基本需求 使用vim中的autocmd命令可以很容易的将正在 ... -
Java脚本技术应用实例
2011-01-22 11:24 4074前言 一直以来都很喜欢可以自由扩展的软件,这一点应该已经在很 ... -
可编程计算器(phoc)的设计与实现
2011-01-17 11:34 1855前言 借助JavaScript脚本 ... -
函数式编程(javascirpt)
2009-04-18 22:18 1208前言 Javascript,有人称 ... -
C和指针
2009-05-21 23:15 1052前言 指针是C的灵魂,正是指针使得C存在了这么多年,而且将长 ... -
C和指针(续)
2009-05-25 23:41 1307前言 上一篇《C和指针》可能对关于C和指针的有些内容没有说透 ... -
有限自动机与建模
2009-06-06 10:48 1640前言 在学校学程序设计语言的时候,能接触到的所有例子没有一个 ... -
事件和监听器
2009-06-21 22:06 1360前言 事件监听器是经 ... -
基于总线的消息服务(BBMS)的设计与实现
2009-07-25 22:19 1304前言 异步事件的通知机制在比较有规模的软件设计中必然会有涉及 ... -
JavaScript内核系列 第9章 函数式的Javascript
2010-05-13 19:20 3702第九章 函数式的Javascript 要说Ja ... -
JavaScript内核系列 第8章 面向对象的JavaScript(下)
2010-05-06 09:40 3587接上篇:JavaScript内核系列 第8章 面向对象的Jav ... -
JavaScript内核系列 第8章 面向对象的JavaScript(上)
2010-05-06 09:26 2841第八章 面向对象的 Javascript ... -
JavaScript内核系列 第7章 闭包
2010-05-04 08:48 3768第七章 闭包 闭包向来给包括JavaScript程序 ... -
JavaScript内核系列 第6章 正则表达式
2010-04-27 19:44 3931第六章 正则表达式 正则表达式是对字符串的结构 ... -
JavaScript内核系列 第5章 数组
2010-04-24 15:17 4354第五章 数组 JavaScript的数组也是一个比较 ... -
Swing小应用(Todo-List)之三
2010-04-22 20:47 2058前言 去年9月份开发的那个小工具sTodo,只是做到了能用, ... -
JavaScript内核系列 第4章 函数
2010-04-18 17:31 4946第四章 函数 函数,在C语言之类的过程式语言中 ... -
JavaScript内核系列 第3章 对象与JSON
2010-04-12 09:12 6006第三章 对象与JSON JavaScript对象与传 ... -
JavaScript内核系列 第2章 基本概念
2010-04-03 19:44 5496第二章 基本概念 ...
相关推荐
Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfire。
openfire4.2.1 + smack4.2.2即时通信工具开发(android端登录、发送消息、接收消息),请参见我的博客http://blog.csdn.net/wangearn/article/details/79096347
Android使用smack连接ejabberd服务器,完成了连接、登录、创建新用户、收发消息的功能
使用SMACK虚拟文件系统和CIPSO进行网络安全控制
1)smack api,基于smack官方javadoc制作而成,格式chm,语言english; 2)smack documentation,内容包括Overview,Getting Started Guide等等,格式chm,语言为中文(感谢fhqdddddd的奉献,本文档基于...
smack用于android移动端的开发,可以结合openfire使用,进行im通信
smack与asmack的区别(包名对比解析)
详情请移步:http://blog.csdn.net/alfred_c/article/details/50017607
本文介绍基于java的即时通信服务器openfire3.6.4和spark2.5.8客户端产品以及如何使用smack开发java程序与即时通信用户交互,spark除聊天支持外,还支持语音,多人视频,文件传输,截图,远程观看桌面,msn网关...
Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档
SMACK文件传输的介绍及代码,官网源文件
smack xmpp 即时通讯,使用smack库结合openfire实现即时通讯
smack源码
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。 附件是目前最新版本的smack库,含源码。
该资源为smack开发使用到的jar包,请大家务必先下载到本地项目中,进行解压,导入到自己项目中的libs文件。
Smack中文API文档
Smack主要是xmpp协议的实现,提供了一套很好的api,所以下面操作xmpp都是通过使用Smack的api来实现,从4.1.0开始,它就支持Android了,所以我们直接使用Smack即可,当然在这不支持之前是使用Asmack这个包的,里面...
这个是Smack API的中文版,详细介绍了smack原理,并且有几个小例子在里面
基于xmpp openfire smack 的即时通信客户端,高仿qq,难得的学习资源。 资源介绍:http://blog.csdn.net/shimiso/article/details/11225873
基于最新的 smack4.1 androidstudio开发demo 可以登录 已验证