亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

怎樣用Java實現MSN Messager的功能

2019-11-18 13:08:29
字體:
來源:轉載
供稿:網友

  現在的即時通訊軟件琳瑯滿目,大家耳熟能詳的無非就是騰訊公司的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,可以從http://sourceforge.net/PRojects/jmsn/站點上下載,該項目的首頁基本上以韓文為主,包括它的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 2003-11-21 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
  ("youraccount@hotmail.com", "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)
  {
  this.messenger = 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中讀取所有的好友并給他們一一發送信息。
  
  關于文件傳輸:
  
  可能這是我發現的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区亚洲| 亚洲wwwav| 日韩免费电影在线观看| 国产精品va在线播放我和闺蜜| 日韩av一区在线观看| 国产999在线观看| 一本色道久久88亚洲综合88| 欧美二区在线播放| 国产一区二区三区在线免费观看| 日韩在线免费视频| 亚洲天堂免费观看| 色噜噜狠狠狠综合曰曰曰88av| 欧美日韩国产丝袜美女| 亚洲国产精品中文| 国产综合在线视频| 久久久亚洲天堂| 91色在线观看| 疯狂欧美牲乱大交777| 国产在线视频欧美| 久久久女女女女999久久| 国产精品偷伦免费视频观看的| 日本午夜精品理论片a级appf发布| 欧美成年人网站| 午夜精品视频在线| 中文字幕国产亚洲2019| 成人乱人伦精品视频在线观看| 国产成人精品国内自产拍免费看| 亚洲天堂男人天堂| 欧美视频精品一区| 久久精品成人一区二区三区| 麻豆国产精品va在线观看不卡| 国产精国产精品| 亚洲精品国精品久久99热| 欧美第一淫aaasss性| 精品福利免费观看| 最新亚洲国产精品| 欧美激情在线播放| 亚洲在线一区二区| 欧美成人午夜影院| 欧美高清视频在线播放| 91在线观看免费高清完整版在线观看| 中文字幕日韩av综合精品| 97精品久久久中文字幕免费| 91美女福利视频高清| 日韩欧美在线免费| 色综合久久中文字幕综合网小说| 日韩在线中文视频| 欧美资源在线观看| 亚洲国产精久久久久久久| 岛国av午夜精品| 国产精品自拍偷拍视频| 亚洲人成电影网站| 亚洲综合在线播放| 国产日韩在线看片| 在线观看国产欧美| 亚洲精品有码在线| 91久久在线观看| 亚洲国模精品一区| 久久99亚洲热视| 亚洲欧美中文字幕在线一区| 午夜精品久久久久久久99热浪潮| xxx一区二区| 欧美伊久线香蕉线新在线| 精品视频9999| 国产成人鲁鲁免费视频a| 国产精品黄色影片导航在线观看| 亚洲视频在线观看免费| 国产精品黄页免费高清在线观看| 成人网在线观看| 欧美亚洲视频在线看网址| 欧美又大粗又爽又黄大片视频| 亚洲自拍中文字幕| 欧美激情一区二区三区在线视频观看| 日本高清不卡在线| 成人福利网站在线观看| 精品久久久在线观看| 日本久久久久久久久久久| 成人av.网址在线网站| 91精品视频免费观看| 综合136福利视频在线| 成人激情视频在线播放| 国产日韩中文字幕| 亚洲成色999久久网站| 国产欧美 在线欧美| 久久伊人色综合| 国产精品视频男人的天堂| 日韩av理论片| 国产精品视频久久| 久久成人精品电影| 欧美性生交大片免费| 在线精品国产欧美| 正在播放欧美一区| 美女性感视频久久久| 日韩精品在线私人| 成人午夜激情免费视频| 久久精品99国产精品酒店日本| 久久国产精品久久国产精品| 亚洲精品乱码久久久久久按摩观| 亚洲jizzjizz日本少妇| 欧美亚州一区二区三区| 在线观看日韩www视频免费| 黄色成人在线免费| 一区二区三区四区在线观看视频| 曰本色欧美视频在线| 久久久久久国产精品久久| 国产精品av电影| 欧美精品做受xxx性少妇| 日韩精品视频在线观看免费| 日韩有码在线观看| 一本色道久久88综合日韩精品| 欧美亚洲一级片| 国产精品久久一区主播| 精品久久久久久久久久久久久| 中文字幕在线看视频国产欧美| www.亚洲男人天堂| 激情成人中文字幕| 国产精品96久久久久久又黄又硬| 国产在线播放91| 国产精品十八以下禁看| 日韩a**站在线观看| 国模吧一区二区| 成人黄色在线观看| 国产精品视频免费在线观看| 日本一区二区三区四区视频| 草民午夜欧美限制a级福利片| 狠狠躁天天躁日日躁欧美| 伦伦影院午夜日韩欧美限制| 国产日韩亚洲欧美| 欧美一级在线播放| 色婷婷成人综合| 91色视频在线导航| 黑人精品xxx一区一二区| 日韩精品视频在线免费观看| 亚洲人成电影在线观看天堂色| 日本aⅴ大伊香蕉精品视频| 在线免费观看羞羞视频一区二区| 日韩欧美成人免费视频| 日韩精品视频在线观看免费| 欧美性感美女h网站在线观看免费| 欧美激情一区二区三区高清视频| 欧美日韩国产一区二区三区| 欧美激情手机在线视频| 亚洲综合色av| 国产91对白在线播放| 91久久综合亚洲鲁鲁五月天| 国产精品 欧美在线| 国产精品爽黄69| 欧美电影在线观看高清| 亚洲老头同性xxxxx| 亚洲免费伊人电影在线观看av| 91精品国产91久久久久福利| 亚洲日本中文字幕| 色多多国产成人永久免费网站| 美乳少妇欧美精品| 国产免费一区二区三区在线能观看| 国产精品ⅴa在线观看h| 亚洲国产高潮在线观看| 国产精品96久久久久久又黄又硬| 亚洲精品少妇网址| 亚洲天堂av综合网| 欧美日韩亚洲精品内裤| 亚洲自拍av在线| 国产精品黄页免费高清在线观看| 久久久在线免费观看|