锁定老帖子 主题:使用smack与GTalk通信
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-05
最后修改:2009-07-05
前言前两天无意中发现了smack(火星了,如果你比我还火星,请参看此处:http://www.igniterealtime.org/downloads/index.jsp ),在网上也看到了几个例子,于是想用Swing将其包装一下,做一个简单的gtalk客户端,一来时间有限,而来自己对Swing的熟悉程度不够,代码就不贴出来现眼了,大概说下smack的API,先看下图: 主界面,显示contact list
消息发送成功。 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的扩展,可以将其做成一个可用的工具出来,如语音,视频等的支持。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 7527 次