知识大全 怎样用Java实现MSN Messager的功能

Posted

篇首语:业精于勤,荒于嬉;行成于思,毁于随。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 怎样用Java实现MSN Messager的功能相关的知识,希望对你有一定的参考价值。

怎样用Java实现MSN Messager的功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  现在的即时通讯软件琳琅满目 大家耳熟能详的无非就是腾讯公司的QQ 微软公司的MSN Messenger以及网易的泡泡 就用户量而言这三者应该是名列前茅的 但是腾讯公司的QQ以及网易的泡泡由于并没有公开其客户端与服务器之间的通讯协议导致开发者很难利用起这一庞大的用户群体来开辟另外的服务渠道     MSN Messenger这一由世界头号软件商 微软公司开发的即时通讯软件 凭借其与windows操作系统和整个微软产品家族的紧密结合 简单实用 性能稳定 世界通用等特点 很快被中国用户接受 目前其用户正在以几何数字增长 但是让开发者雀跃的是该软件同时也提供了开放的API以及开放的通讯协议     著名的MSN Plus就是一款利用其API开发的用于扩展MSN Messenger功能的插件 而我们今天要介绍的jMSN则是封装了MSN Messenger开放的通讯协议的Java API 通过这个API开发者完全可以使用Java语言模拟出MSN Messenger软件 API的作者也提供一个用Java语言编写的在某方面功能甚至比MSN Messenger还强大的MSN 客户端软件 由于采用了跨平台的Java语言开发 因此该软件也可同时运行于其他操作系统 目前已经经过测试的有各种Linux系统以及Mac OS上 当然还有视窗操作系统     jMSN是一个韩国人开发的开放源码的API 可以从站点上下载 该项目的首页基本上以韩文为主 包括它的API文档的说明都是韩文 这个让我非常头疼 不过没有关系 因为jMSN非常简单 如果没有什么特殊情况下不看那些说明也没有关系     jmsn是一个完整的Java应用程序 下载解压后可以直接运行 运行的界面跟微软的MSN Messenger很类似 包括操作上都非常一致 如果你的操作系统是Linux或者其他那都可以直接用它来替代微软的程序 另外一个是msnm lib 这个就是我们今天要介绍的API 它仅仅是一个开发包 在jmsn组件中已经包含了这个包     你可能想先体验一下jmsn自带的程序看看到底能完成什么样的功能吧?解压jmsn压缩包后的目录中会有一个可执行文件 不过如果你的JDK不是使用安装程序安装的 建议你不用执行它 它会找不到jre的 你可以使用命令行来启动这个程序 这样做有个好处是你还可以看到运行中打印出来的信息     应该说界面跟MSN Messenger是非常类似的 用户可以通过它发送和接收消息等 在启动jMSN的命令行窗口中可以看到jMSN与服务器之间通讯的详细信息     前面我们主要在介绍jMSN大概的情况 介绍它能完成什么样的功能 下面我们开始来了解怎么利用jMSN自带的API msnm lib来实现这些功能 我们可以通过msnm lib来完成与MSN服务器之间的通讯而不需要我们去操心具体的通讯协议的细节     事实上msnm lib给我们做了更多的事情使得我们使用msnm lib来开发一个MSN应用程序变得非常的简单 这也就是我前面提到的我们完全可以不去可能它所提供的韩文API文档的缘故 因为使用它实在是太简单了     闲话说了那么多 现在我们就开始来开发我们自己基于Java的跨平台的MSN客户端程序 相信听到这句大家都会觉得血脉膨胀 没错 还有什么比动手写程序更让人兴奋的事情呢?何况还是基于Java的 跨平台的!    我们先给出一段可运行的代码来完成一个最简单的功能 当有人把它加入好友时 程序自动将之加入好友 当有人给它发送信息 程序自动回复一条相同的信息 完成这么简单的功能的代码如下     /*  * Created on by Liudong  */  package jmsn demo;    import rath msnm MSNMessenger;  import rath msnm SwitchboardSession;  import rath msnm UserStatus;  import rath msnm entity MsnFriend;  import rath msnm event MsnAdapter;  import rath msnm msg MimeMessage;  /**  * MSN演示程序  * @author Liudong  */  public class MSNDaemon extends Thread    private static MSNMessenger msn;    public static void main(String[] args)    msn = new MSNMessenger  ( you password );  msn setInitialStatus(UserStatus ONLINE);  msn addMsnListener(new MSNAdapter(msn));  msn login();  System out println  ( Waiting for the response );  //捕捉Ctrl+C的输入以便注销MSN的登录  Runtime getRuntime()   addShutdownHook(new MSNDaemon());    /**  * 用户中止程序执行  */  public void run()    msn logout();  System out println( MSN Logout OK );      /**  * MSN消息事件处理类  * @author Liudong  */  class MSNAdapter extends MsnAdapter      MSNMessenger messenger;    public MSNAdapter(MSNMessenger messenger)    ssenger = messenger;    /**  * 某人正在输入信息  */  public void progressTyping(  SwitchboardSession ss   MsnFriend friend   String typingUser)    System out println  (friend getLoginName() + 正在输入信息 );    /**  * 收到消息的时候执行该方法  */  public void instantMessageReceived(  SwitchboardSession ss   MsnFriend friend   MimeMessage mime)    System out print( 接收到消息    + friend getFriendlyName() + > );  System out println(mime getMessage());  try   //发送相同的回复信息给发送者  messenger sendMessage  (friend getLoginName() mime);   catch (Exception e)    e printStackTrace();      /**  * 登录成功后执行该方法  */  public void loginComplete(MsnFriend own)    System out println  (own getLoginName() + Login OK );    /**  * 登录失败后执行该方法  */  public void loginError(String header)    System out println  ( Login Failed: + header);    /**  * 好友离线时执行该方法  */  public void userOffline(String loginName)    System out println  ( USER + loginName + Logout );    /**  * 好友上线时执行该方法  */  public void userOnline(MsnFriend friend)    System out println  ( USER +friend getFriendlyName()+ Login );    /**  * 有人加我为好友时执行  */  public void whoAddedMe(MsnFriend friend)    System out println  ( USER + friend getLoginName() + Addme );  try   messenger addFriend(friend getLoginName());   catch (Exception e)    e printStackTrace();      /**  * 有人把我从好友列表中删除时执行  */  public void whoRemovedMe(MsnFriend friend)    System out println  ( USER +friend getLoginName()+ Remove me );  try   messenger removeFriend(friend getLoginName());   catch (Exception e)    e printStackTrace();          除了两个常用的对象MsnFriend以及MimeMessage分别用来表示我的好友以及MSN信息外 其他我们需要了解的也就是MSNMessenger以及MsnAdapter了 当然了前提是我们不需要除了聊天外的其他功能 例如文件传输等等     类MSNMessenger对应着一个帐号的一次登录会话 我们仅仅是需要告诉MSNMessenger类我们登录所用的帐号 密码 登录后的初始状态以及我们怎么来处理从MSN服务器上接收到的任何信息     在msnm lib中 处理MSN信息是通过一个叫MsnAdapter类来处理的 这个类定义了如何处理例如收到消息 有人加我为好友等等的事件 开发者可以重载这些方法以便进行自行处理     我们自行扩展MsnAdapter的类必须告诉MSNMessenger实例知道 这也就是我们前面代码中的    msn addMsnListener(new MSNAdapter(msn));    自行扩展MsnAdapter的类是用来处理被动消息的 例如有人给我发消息等 当我们要发送消息给别人的时候就需要用到MSNMessenger的实例 这也就是我们为什么要把MSNMessenger的实例传递给MSNAdapter的原因 因为当我们接收到任何消息时要给发送人回复一条相同的信息 到此我们前面提出的简单功能已经完成了 读者可以在自己的机器上进行测试 运行时需要用到msnm lib库 也就是msnm jar文件     关于多人聊天     MSN有另外一个不错的功能就是多人同时聊天 msnm lib对这个功能支持也非常好 在MsnAdapter中定义的方法instantMessageReceived的第一个参数类型为SwitchboardSession 当接收到消息时 我们可以从这个参数中获取多人聊天的一个会话标识 同时可以通过getMsnFriends来读取参与当前聊天的所有好友 当你要主动发送消息的时候你就必须从SwitchboardSession中读取所有的好友并给他们一一发送信息     关于文件传输     可能这是我发现的 cha138/Article/program/Java/JSP/201311/19199

相关参考

怎样用中药人工周期疗法治疗功能性子宫出血

功能性子宫出血血止以后,按照妇女月经周期的生理变化用药,促使其达到调整月经周期的目的。  ⑴增殖期:(月经第4~11天)以养阴调气血为主,促进子宫内膜正常生长。选用促卵泡汤:山药、菟丝子各15克,当归

怎样用中药人工周期疗法治疗功能性子宫出血

功能性子宫出血血止以后,按照妇女月经周期的生理变化用药,促使其达到调整月经周期的目的。  ⑴增殖期:(月经第4~11天)以养阴调气血为主,促进子宫内膜正常生长。选用促卵泡汤:山药、菟丝子各15克,当归

怎样用五行学说说明和概括脏腑的生理功能和相互关系?

中医学是以五行抽象的属性来说明和概括脏腑功能的。如木曰曲直,其性生发、条达而柔和。肝的功能是藏血而主疏泄,性喜条达而恶抑郁,具有欣欣向荣的生发之机,主少阳春升之气,因此一言以蔽之“肝属木”。火曰炎上,

知识大全 我的微信红包功能被暂停七天。七天已经过了还是用不了。怎样解除红包

我的微信红包功能被暂停七天。七天已经过了还是用不了。怎样解除红包1.微信被封是没有提示的,只有功能的限制。2.如果违规严重的话,会限制登录。解封第一次被封等一天就可以了,第二次被封就要等的时间长一点。

家装中怎样了解色彩有什么功能?

1、用涂料打造魅力空间Function01用一面墙创造视觉焦点色彩,本身就是一种力量,当它成为空间中的主角时,空间立即有了焦点与生命力。Function02创造居家风格每种风格都有地道的用色基调。比如

知识大全 安卓系统手机怎样取消移动无线wifi 的自动登陆功能

安卓系统手机怎样取消移动无线wifi的自动登陆功能手机设置——无线和网络——无线局域网设置——在无线局域网网络里长按你自动连接的那个网络会出选项,在设置!不想用可以直接关闭无线网络。手机用中国移动无线

慢性肾功能不全病人怎样选择食谱

主食,可选用江苏标一米、中白米、富强粉、藕粉。不宜用江苏标三糯米、北京特一大米小米。  豆制品,可选用豆浆、凉粉、粉丝、四季豆。不宜用黄豆、绿豆、赤豆、蚕豆、素鸡、油豆腐、豆腐干、面筋。  蔬菜类,可

慢性肾功能不全病人怎样选择食谱

主食,可选用江苏标一米、中白米、富强粉、藕粉。不宜用江苏标三糯米、北京特一大米小米。  豆制品,可选用豆浆、凉粉、粉丝、四季豆。不宜用黄豆、绿豆、赤豆、蚕豆、素鸡、油豆腐、豆腐干、面筋。  蔬菜类,可

知识大全 电信翼支付怎样用

电信翼支付怎样用?可以持身份证到当地营业厅更换翼支付卡。所使用的手机和UIM卡需要更换为专用的支持RFID功能的手机和UIM卡。可通过(电脑上网)、WAP(手机上网)、短信、语音IVR等方式使用中国电

居室色调怎样巧用灯光变幻增添艺术效果?

居室色调怎样巧用灯光变幻增添艺术效果?如果人们能科学地掌握光和色彩的基本知识,然后结合房间空间大小、家具的组合、各种房间功能需求、灯光明暗色调的相互搭配等条件,进行精心设计安排,一定会给居室增添无限的