<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大大毛 的筆記

      DDM's Note

    哪怕沒有辦法一定有說法,
    就算沒有鴿子一定有烏鴉,
    固執無罪 夢想有價,
    讓他們驚訝.

    posts - 14, comments - 23, trackbacks - 0, articles - 58
       :: 首頁 ::  :: 聯系 ::  :: 管理

    自己實現的一個ICQ程序(得意之作啊)

    Posted on 2006-03-09 02:07 大大毛 閱讀(483) 評論(0)  編輯  收藏 所屬分類: JAVA

    前言:
    ??????? 這是去年來廣州找工作之前寫的,預備在應聘時當磚頭拿出來。結果沒得逞,好象人家只要看看編程風格就行了。不過全部是自己寫的(從頭到腳),結構也是自己想著去設計的,里面有很多東西,經常都可以拿出來借鑒一下子.用處也算不小。

    簡介如下:
    開發環境:Win2k+JDK1.4.2
    開發工具:Eclipse3.0
    數據環境:
    ???????
    access+軟連接池,演示時容易沙
    開發者:
    ???????
    個人,原本是3個人想著學點東西,結果沒曾想那兩個兄弟覺得麻煩了,一個寫了不到200行的SOCKED通信,一個寫了N小的聊天室.
    功能:
    ??????? 能夠實現用戶注冊,登錄,查找(3種方式,跟當年的QQ學的),聊天以及好友的上/下線提示等...
    使用注意:
    ??????? 一定要記得配數據源,ZIP包中有說明的。不然無法工作。
    結構說明:
    ??????? 這個得要好好說一下,畢竟是心血嘔作啊。看看Socket的工作方式,就是服務端用serversocket在指定端口偵聽,客戶端向此端口連接,一旦成功,則serversocket從阻塞狀態中恢復,產生一個socket對象與之對應。結果產生的就是Socket的一對一(在QQ群上聽見人說Socket可以一對多,不曉得咋整)。圖示如下:
    ????????ICQ示意圖
    ??????? 其中客戶端與服務端都是一樣的Socket對象,可以封成一個類,把輸入偵聽也封進去(它與其它的對象完全無關),輸出留下一個接口,這個類我叫它"Linker",然后作為ICQ,每個客人當然是有ID和圖標/性別等信息的,我把它放入"ClientInfo"類,這個類實際上就是一個JavaBean,這樣與數據庫打交道時就比較好用了。在這兩個類的上一層我提供了一個"Client"再次封了一下,它的最大用途是用于與消息分發器打交道,讓它持有一個消息分發器的引用,這個類并保留了Linker的輸出接口便于消息處理器調用。為了實現Linker收到消息時通知Client,我使用了觀察者模式,讓Linker實現Observable接口,而Client繼承至Observer.這樣通訊的線路方面就搞定了。
    ??????? 在Client對象的管理上,為了便于分組(QQ不也提供好友之類的么)。我提供了一個ClientGroup類來放Client,提供兩個實例(已登錄/未登錄)來分開放,感覺上好一些。由于消息處理上經常需要調用Client對象,把這個功能拿出來專門封在一個類中,我叫它"ClientMangager"來管理那群滑頭的Client
    ??????? 然后到重要的消息處理上了,做了一個"MessageProcessor"的接口,讓消息分發器"ServerMessageProcessor"和針對具體情況的消息處理器都實現這個接口,由于ICQ的通訊是實時也是多對多的,只能采用隊列+先進先出的方式,這樣想來可以處理一些狀況了。分發器中持有一個HashMap,Key放上消息號,Value放上處理器的引用。由控制器來關心如何去搭配好了。這樣的考慮就是,如果后期有興趣增加ICQ的功能,如傳輸文件/圖片等,就比較簡單了,加一個消息號,加一個消息處理器,在控制器中向消息分發器添加一個注冊即可。感覺上這是個么事模式之類的,呵呵。
    ????? 服務端這邊還剩一個端口偵聽和數據處理了,端口偵聽用了一個"PortListener",我把它放在common包中,原來打算是客戶端那邊以后實現客戶/客戶交互的時候也能夠用上。數據處理上用上學校里的例子,有例子好啊改改就成自己的了。數據存取上為圖方便采取的是直接對象存取(C++學習時的大禁啊),不管它了,反正能用,不過遺留下了隱患,一旦改動了一下類,就讀不出來了。
    ????? 服務端這邊最后再上一個"Server"做為控制器,讓它持有PortListener、ServerMessageProcessor、ServerClientManger,還是老套路用觀察者模式與PortListener掛上勾。服務端OK。
    ????? 再到非常非常重要的消息上,消息是多種多樣的,每一個消息對應一個功能,來一個接口好了"Message",該接口中還放上了消息號(final)這樣編寫的時候也就簡單直觀得多了。
    ????? 到此,時間已經過去N久,開始客戶端編程,客戶端是要來上幾個窗體的,麻煩啊。根據功能分成多個JPanel/JFrame了,如登錄窗口,顯示聊天的面板,輸入+發送面板,好友顯示的面板,還有查找好友。。。總之耐心快沒了。最后還是栽在了那個好友面板上,那個JList是個痛,我用上了ListCellRender渲染器,這個渲染器說實話還是蠻成功的,但是整到JList中就不賊,在單類的Main中演示都是好的。但是在最后的成果上就時靈時不靈,經常都會出現JList白板一塊的問題(完全隨機啊)。后來思考了一下,懷疑是在構造函數中調用太多東西的緣故,所以下載的朋友最后多試幾次我保證能OK,我咳。
    ????? 東西說得蠻多了,至此為止,眼見為實。
    拜托:
    ??????? 有研究的朋友能整好那個JList顯示的問題,萬望告之。。。。
    如實告之:
    ?????? Server這邊是先寫的,比較有耐心,Client那邊是先來寫的,耐心沒了,要評論的朋友多看看Server,好多留個面子
    下載:
    ????? MyICQ.zip

    i am ddm

    主站蜘蛛池模板: 亚洲a∨国产av综合av下载| 久久久精品视频免费观看| 国产大片91精品免费看3| 国产伦精品一区二区免费| 亚洲午夜精品一区二区| 在线播放免费播放av片| 国产精品偷伦视频免费观看了| 久久精品国产亚洲av影院| 国产成人高清精品免费软件| 国产啪精品视频网站免费尤物| 亚洲日本一线产区和二线 | 中文字幕人成人乱码亚洲电影 | 亚洲色偷偷综合亚洲AV伊人蜜桃| www.亚洲精品.com| 57pao国产成视频免费播放| 国产精品亚洲专一区二区三区| 亚洲成年轻人电影网站www| 国产成人aaa在线视频免费观看| 国产精品免费高清在线观看| 婷婷国产偷v国产偷v亚洲| 亚洲性天天干天天摸| 成人亚洲综合天堂| 亚欧色视频在线观看免费| 日韩在线视频线视频免费网站| 亚洲一级毛片免费观看| 精品亚洲综合久久中文字幕| 精品免费国产一区二区三区 | 曰批全过程免费视频播放网站| 一区二区免费在线观看| 亚洲国产熟亚洲女视频| 亚洲男人天堂av| 伊人婷婷综合缴情亚洲五月| 免费观看的毛片手机视频| 亚洲精品免费在线视频| 在线涩涩免费观看国产精品| 人人爽人人爽人人片A免费| 亚洲日韩一区精品射精| 亚洲国产精品综合福利专区| 亚洲VA中文字幕无码一二三区| 亚洲精品无码av天堂| 国产高清免费在线|