日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

用JAVA實現MSN Messager的功能

瀏覽:34日期:2024-06-23 13:20:56
內容: 現在的即時通訊軟件琳瑯滿目,大家耳熟能詳的無非就是騰訊公司的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的主頁中提供兩個部件供下載如下圖所示,其中jmsn是一個完整的JAVA應用程序,下載解壓后可以直接運行,運行的界面跟微軟的MSN Messenger很類似,包括操作上都非常一致,如果你的操作系統是Linux或者其他那都可以直接用它來替代微軟的程序。另外一個是msnm-lib,這個就是我們今天要介紹的API,它僅僅是一個開發包,在jmsn組件中已經包含了這個包。 你可能想先體驗一下jmsn自帶的程序看看到底能完成什么樣的功能吧?解壓jmsn壓縮包后的目錄中會有一個可執行文件,不過如果你的JDK不是使用安裝程序安裝的,建議你不用執行它,它會找不到jre的。你可以使用命令行來啟動這個程序,這樣做有個好處是你還可以看到運行中打印出來的信息。啟動jMSN的命令:java -jar jmsn.jarjMSN的登錄界面以及主窗口如下圖所示: 應該說這個界面跟MSN Messenger是非常類似的。用戶可以通過它發送和接收消息等。在啟動jMSN的命令行窗口中可以看到jMSN與服務器之間通訊的詳細信息。前面我們主要在介紹jMSN大概的情況,介紹它能完成什么樣的功能。下面我們開始來了解怎么利用jMSN自帶的API:msnm-lib來實現這些功能。下圖是msnm-lib與jMSN包括MSN系統之間的關系,也就是說我們可以通過msnm-lib來完成與MSN服務器之間的通訊而不需要我們去操心具體的通訊協議的細節。事實上msnm-lib給我們做了更多的事情使得我們使用msnm-lib來開發一個MSN應用程序變得非常的簡單,這也就是我前面提到的我們完全可以不去可能它所提供的韓文API文檔的緣故,因為使用它實在是太簡單了。 閩南語說:說破不值錢!閑話說了那么多,現在我們就開始來開發我們自己基于JAVA的跨平臺的MSN客戶端程序。相信聽到這句大家都會覺得血脈膨脹,沒錯,還有什么比動手寫程序更讓人興奮的事情呢?何況還是基于JAVA的、跨平臺的!我們先給出一段可運行的代碼來完成一個最簡單的功能:當有人把它加入好友時,程序自動將之加入好友,當有人給它發送信息,程序自動回復一條相同的信息。OK,完成這么簡單的功能的代碼如下:/* * 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中讀取所有的好友并給他們一一發送信息。關于文件傳輸:可能這是我發現的關于msnm-lib的唯一不足,或者說還不夠完善的部分。經過測試發現使用微軟的MSN程序可以正常傳輸文件的兩臺機器用jMSN卻無法傳輸,錯誤信息都是說連接超時,這兩臺機器不在同一個子網。相信msnm-lib對這個功能并沒有進行處理。由于并沒有兩臺直接連接Internet的機器,因此關于jMSN的文件傳輸一直都沒有辦法來做一個試驗,希望新版本的msnm-lib能解決好這個問題。總結:盡管在文件傳輸上有點瑕疵,但是msnm-lib所提供的功能已經非常棒了,至少在我第一眼看到它的時候心里說:沒錯,這就是我想要的東西!本文旨在介紹如何使用msnm-lib來完成一個簡單的MSN客戶端,至于如果讓它在實際的應用系統中發揮作用,讀者們肯定有比我更多的想法,比如說是否可以利用它來豐富客服的渠道等等,當然這些都超過我們的題目。如在使用中發現任何問題,歡迎來信共同研究。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
噜噜噜久久亚洲精品国产品小说| 欧美91视频| 在线精品亚洲| 亚久久调教视频| 91嫩草精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 精品成av人一区二区三区| 免费一级欧美在线观看视频 | 色偷偷偷在线视频播放| 韩国久久久久久| 91精品久久久久久久久久不卡| 欧美日韩在线播放视频| 日韩午夜av| 日本中文字幕不卡| 日韩福利视频网| 久久精品国产久精国产| 日本精品影院| 亚洲男人在线| 国产va免费精品观看精品视频| 88xx成人免费观看视频库| 日韩天堂av| 国产精品99久久久久久董美香| 国产中文在线播放| 在线亚洲观看| 国产日本久久| 久久蜜桃精品| 日韩不卡免费视频| 成人精品久久| 亚洲三级观看| 免费一区二区三区在线视频| 亚洲精品97| 国产欧美日韩精品高清二区综合区 | 国产中文一区| 亚洲2区在线| 国产盗摄——sm在线视频| 亚洲神马久久| 国产精品一区二区av日韩在线| 久久久人人人| 亚洲精品乱码| se01亚洲视频| 人人爱人人干婷婷丁香亚洲| 日韩成人三级| 最近国产精品视频| av中文资源在线资源免费观看| 先锋影音国产一区| 日本激情一区| 日韩久久99| 国产综合欧美| 国产精品久久观看| 日韩av中文字幕一区二区| 久久国产影院| 免费在线亚洲| 亚洲免费福利一区| 日韩欧美三级| 国产欧美综合一区二区三区| 日韩不卡视频在线观看| 国产精品男女| 免费精品视频最新在线| 国产福利91精品一区二区| 视频一区二区中文字幕| www.com.cn成人| 国产乱子精品一区二区在线观看| 黑丝一区二区三区| 极品av在线| 国产精品久久久久av蜜臀| 视频在线观看91| 日本欧美不卡| 精品美女视频| 日韩精品亚洲aⅴ在线影院| 天堂日韩电影| 久久伊人亚洲| 日韩一区中文| 亚洲中午字幕| 久久精品播放| 91精品国产自产在线观看永久∴| 精品久久国产一区| 国产欧美大片| 香蕉久久一区| 影音先锋久久精品| 亚洲精品极品少妇16p| 中文一区一区三区高中清不卡免费| 欧美一级二级三级视频| 丝袜诱惑制服诱惑色一区在线观看 | 欧美三级第一页| 在线 亚洲欧美在线综合一区| 日本不卡免费高清视频在线| 国产一区福利| 精品国产亚洲一区二区三区在线| 日本中文字幕一区二区视频| 天使萌一区二区三区免费观看| 国产 日韩 欧美一区| 国产a亚洲精品| 在线人成日本视频| 国产在线不卡一区二区三区| 精品国产美女a久久9999| 久久99精品久久久野外观看| 国产探花一区二区| 日韩精品免费一区二区夜夜嗨| 老鸭窝毛片一区二区三区| 在线成人直播| 欧美精品一区二区三区精品| 999国产精品| 狠狠操综合网| 久久亚洲风情| 首页欧美精品中文字幕| 欧美午夜不卡影院在线观看完整版免费| 久久伦理在线| 一区在线视频观看| 一区二区亚洲精品| 99国产成+人+综合+亚洲欧美| 国精品一区二区| 在线一区免费| 久久国产88| 青青国产91久久久久久| 国产精品高潮呻吟久久久久| 国产极品嫩模在线观看91精品| 久久精品国产精品亚洲毛片| 电影亚洲精品噜噜在线观看 | 亚洲爱爱视频| 激情视频一区二区三区| 樱桃成人精品视频在线播放| 中文字幕一区二区三区日韩精品| 国产午夜久久| 日韩超碰人人爽人人做人人添| 国产精品xxx| 麻豆国产在线| 99国产精品99久久久久久粉嫩| 中文字幕av一区二区三区人| 久久婷婷国产| 婷婷丁香综合| 欧美日韩 国产精品| 国产成人精品一区二区三区免费 | 欧美日韩国产在线一区| 亚洲区第一页| 激情综合婷婷| 99日韩精品| 欧美片第1页综合| 久久精品亚洲人成影院| 免费在线视频一区| 久久亚洲黄色| 午夜久久黄色| 精品中文字幕一区二区三区| 亚洲v在线看| 7777精品| 国产在线欧美| 国产欧美日韩在线一区二区 | 天海翼亚洲一区二区三区| 老司机精品视频在线播放| 伊人久久大香线蕉av不卡| 日韩国产欧美视频| 午夜欧美巨大性欧美巨大| 日本亚洲最大的色成网站www| 欧美激情另类| 日本91福利区| 99成人在线| 国产资源在线观看入口av| 午夜性色一区二区三区免费视频| 麻豆成人av在线| 最新国产精品| 亚洲欧美一区在线| 久久精品三级| 日本午夜精品| 女同性一区二区三区人了人一| 美女在线视频一区| 免费在线观看精品| 日韩在线短视频| 国产精品毛片aⅴ一区二区三区| 国产精品99一区二区| 精品一区二区男人吃奶| 亚洲日韩中文字幕一区| 久久国产影院| 国产专区精品| 91免费精品国偷自产在线在线| 蜜桃视频欧美| 伊人久久av| 欧美国产另类| 日韩av字幕| 亚洲一级大片| 国产女优一区| 久久久久国产精品一区三寸 | 欧美aⅴ一区二区三区视频| 亚洲精选av| 三级欧美在线一区| 欧美丝袜一区| 激情久久99| 久久国内精品| 日韩影院在线观看| 欧美午夜不卡| 欧美丝袜一区| 欧美日韩一二| 亚洲不卡系列| 国产精品国产一区| 国产精品香蕉| 日本a级不卡| 日韩精品视频网站| 综合激情网站| 中文字幕日韩高清在线| 六月婷婷一区| 午夜在线一区| 欧美专区18|