<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

    主站蜘蛛池模板: 57pao国产成视频免费播放| av永久免费网站在线观看| 国产三级在线观看免费| 亚洲婷婷天堂在线综合| 91高清免费国产自产| 亚洲视频一区在线观看| 亚洲免费中文字幕| 亚洲天堂一区二区三区四区| 中文字幕无码免费久久99| 亚洲精品国产精品国自产网站 | 亚洲经典千人经典日产| 最近最新的免费中文字幕| 日本亚洲欧美色视频在线播放 | 免费电视剧在线观看| 亚洲日产乱码一二三区别| 国产成人无码区免费A∨视频网站| 日韩精品视频在线观看免费 | 国产猛烈高潮尖叫视频免费| 亚洲6080yy久久无码产自国产| 国产jizzjizz视频全部免费| 一本一道dvd在线观看免费视频| 亚洲欧洲无码AV电影在线观看| 久久99精品免费视频| ASS亚洲熟妇毛茸茸PICS| 亚洲成片观看四虎永久| 暖暖免费在线中文日本| 国产精品亚洲四区在线观看| 国产精品国产免费无码专区不卡| 成在线人免费无码高潮喷水| 亚洲成a人片毛片在线| mm1313亚洲精品无码又大又粗| 日韩a级无码免费视频| 亚洲男人的天堂久久精品| 亚洲欧洲一区二区三区| 久视频精品免费观看99| 国产成人亚洲毛片| 亚洲精品天天影视综合网| 午夜精品在线免费观看| 中文字幕日本人妻久久久免费| 在线aⅴ亚洲中文字幕| 亚洲国产婷婷六月丁香|