《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于ActiveX控件技術的B/S模式單態登錄方法
基于ActiveX控件技術的B/S模式單態登錄方法
來源:微型機與應用2010年第22期
余 偉, 陳和平, 楊 劍
(武漢科技大學 信息科學與工程學院, 湖北 武漢 430081)
摘要: 利用ActiveX控件技術,結合B/S模式與C/S模式的雙重優點,將C/S模式中的socket網絡通信技術移植于B/S模式中,實現單態模式登錄,為基于B/S模式應用系統的客戶端與服務器的通信提供了一種新的解決方案。
Abstract:
Key words :

摘   要: 利用ActiveX控件技術,結合B/S模式C/S模式的雙重優點,將C/S模式中的socket網絡通信技術移植于B/S模式中,實現單態模式登錄,為基于B/S模式應用系統的客戶端與服務器的通信提供了一種新的解決方案。
關鍵詞: 單態; B/S模式; C/S模式; ActiveX組件

    單態(Singleton)模式的主要作用是使得一個類Class只有一個實例存在,即該模式僅允許有且僅有一個實例在運行。在很多C/S模式的軟件中經常會遇到單態模式的應用。用戶用一個賬號登錄系統之后,如果想再用第二個賬號登錄,必須先把第一個賬號注銷。該模式在C/S模式中實現比較簡單,但在B/S模式中實現卻比較復雜。在B/S模式中,瀏覽器本身并不是單態模式,用戶可以打開多個瀏覽器來登錄同一個系統,例如在瀏覽器的實例1中用“張三”登錄,再打開瀏覽器的實例2,用“李四”登錄,這時雖然是用兩個瀏覽器實例在系統中登錄了兩個賬號,但這兩個實例之間會相互影響,特別是與服務器通信時,容易帶來通信對象錯誤的問題。
    B/S模式程序中一般會采用Session或cookie來保存登錄信息,便于在其他的頁面中使用,以避免多次重復登錄系統,即所謂的單點登錄(SSO)模式。在前面所舉的例子中,用“張三”登錄后,可將其保存在session中,令Session[‘username’]=“張三”;如果再用“李四”登錄,同樣也可保存在Session中,Session[‘username’]=“李四”;由于系統中的Session是唯一的,所以這時Session[‘username’]會覆蓋前面的值,使得在用“張三”登錄的系統中實際保存的登錄信息變成了“李四”。
1 單態登錄模式功能
    本文所提到的單態登錄模式擬實現以下功能:
    (1) 在一臺機器上只能登錄一個賬號,如果已經登錄了一個賬號,再次登錄時則提示登錄失敗。
  (2) 一個賬號最多只能在一臺機器上登錄,如果要登錄的賬號已在其他的機器上登錄了,則提示登錄失敗。
  實現此項功能的好處之一是在客戶端與服務器進行通信時,在查找通信對象時不至于發生錯誤。
  單態模式登錄在C/S模式中可以采用很多方法來實現上述功能,但在B/S模式中實現起來卻比較困難。最簡單的方法是在數據庫中建一個數據表Login(字段為UserName和LoginIP),用來保存已登錄的登錄賬號和登錄機器的IP信息。每次登錄時,先查一下該數據表,確定要登錄的賬號在Login表中是否已存在,如果不存在則表明該賬號尚未登錄,允許登錄;如果存在則表明已被登錄,不可再登錄。退出系統時,先將Login表中對應的記錄刪除掉。
  該方法存在的最大問題是:當登錄系統后,若出現非正常退出系統的情況(如突然斷電、程序崩潰等),則無法將Login表中的記錄清除。使得下次登錄查詢Login表時,誤以為該賬號仍在登錄中,導致登錄失敗。
  有人提出每隔一定時間(如30 s)查詢Session來判斷用戶是否在線,這種方法一方面不能保證百分之百地解決問題,另一方面會給服務器帶來不小的負擔。本文所給出的B/S模式的單態模式登錄方法是利用ActiveX技術結合C/S模式與B/S模式的特點,在ActiveX控件中運用網絡通信技術來解決前面所提到的問題。
2 關鍵技術
  ActiveX是微軟提出的采用COM(Component Object Model)和DCOM(Distributed Component Object Model)使軟件組件在網絡環境中進行交互的一組技術集,它是在COM之上建立的一種理論和概念,與具體的編程語言無關,包括ActiveX Dll組件和ActiveX控件。
  本文采用的方法是ActiveX控件。在ActiveX控件中,運用socket網絡通信技術實現客戶端與服務器之間的通信,或者客戶端與客戶端之間的直接通信。用戶可在不安裝客戶端程序的情況下直接通過瀏覽器與服務器或其他客戶端進行通信。Activex控件可直接嵌入Web頁面,在Web頁面中通過<object>標簽來創建,
<object>標簽包含控件的類ID(CLSID),用于識別需要實例化的ActiveX控件,<object>標簽中也可指定控件的CodeBase屬性值,供用戶查找和自動下載該控件并在本地注冊,訪問和控制遠程服務器的數據:如下面代碼所示:
    <object id= "SendCtr" width=0 height=0
  classid="clsid:6571016D-39C4-47AB-9425-9995F68AABE4" codebase="SendMsg.CAB"></object>。
    控件技術的具體實現過程為:當瀏覽器發出請求時,Web服務器向用戶瀏覽器回傳內嵌ActiveX控件的頁面,由瀏覽器負責解釋。在解釋過程中首先用該控件在頁面中注明的ID值,在本地的注冊表內進行查詢,若已經存在,則說明該控件已經在本地安裝,然后通過注冊表中的相關信息直接使用該控件;否則就要根據頁面中所提示的該控件所在的服務器上的路徑到服務器上下載并且自動完成在本地的安裝注冊,使該控件成為本地資源,供以后使用。當Web服務器提供更高版本的ActiveX控件時,瀏覽器會自動下載新的控件,并自動安裝,覆蓋原來的控件??丶峁┝私涌诜椒?,可以在頁面中用JavaScript腳本語言來調用,如:
  document.getElementById("SendCtr").Send(“192.168.
0.13”,”Hello!”);
  此處調用的是SendCtr控件的Send方法,用于向IP為“192.168.0.13”發送消息”Hello!”。
3 實現原理
 要實現網絡通信的功能,可在頁面中加入兩個activex控件:SendMsg和RecvMsg,一個用于發送消息,另一個用于接收消息。SendMsg控件放在登錄頁面中,RecvMsg控件放在登錄后的用戶操作界面中,每次登錄時,如果發現要登錄的賬號在Login表中已經存在,則先由SendMsg控件檢測目的賬號是否在線,如果檢測出不在線,說明該賬號是上次登錄后非正常退出了,使得Login表沒有及時刪除該條記錄,所以先將該記錄刪除掉,再將本次登錄的記錄插入Login 表中;如果檢測到對方在線,則提示該賬號已被人登錄了,本次登錄失敗,可由邏輯流程圖(如圖1)實現上面提到的兩個功能(設登錄賬號為zhangsan,本機IP為192.168.0.13)。

4 核心代碼
   在SendMsg控件中,提供了一個接口函數:CheckIsOnLine(LPCTSTR  strDestIP)。該接口函數僅有一個參數strDestIP,即要檢測是否在線的目的IP。該函數用來檢測目的IP上的系統是否在線,實現的原理也較簡單:給該IP發送一個消息,如果在規定時間內收到回復,則說明對方在線,因為只有其在線,才能在登錄后的用戶界面中用RecvMsg控件回復消息。CheckIsOnLine內部實現主要源碼如下:
CheckIsOnLine(LPCTSTR strDestIP)
{
    char msg[10];
    strcpy_s(msg,".");
    sockaddr_in  checkaddr;
    checkaddr.sin_family = AF_INET;
    checkaddr.sin_addr.S_un.S_addr = inet_addr(strDestIP);
    checkaddr.sin_port = htons(5002);
//連接目的客戶端,向目的客戶端發送信息".",看有無回復
    sendto(m_Socket,msg,10,0,(sockaddr*)&checkaddr,sizeof
(checkaddr));
         fd_set   rfd;   
    FD_ZERO(&rfd);  
    FD_SET(skt,&rfd); 
    timeval   time;  
    time.tv_sec   =   0;  
    time.tv_usec  =   500; 
    int iResult = select(0,&rfd,NULL,NULL,&time);
//檢測在500 ms內有無回信
    if(!iResult)    //對方沒有回信
    {CString strSql = "delete Login where LoginIP =′"+ strDestIP +"′";
    m_Ado.CmdExcute(strSql,FALSE);        
    //將Login表中數據刪除
    }
    else    
    {   char* pData = new char[1024];
        memset(pData,0,1024);
        sockaddr_in addr;
        int factsize = sizeof(sockaddr);
        int ret =recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize);
        if (ret > 0)            //對方在線,提示登錄失敗
        {
MessageBox("該用戶已登錄且尚未退出系統,登錄失??!","提示");
        }
    }
}
    在RecvMsg控件中只需在接受消息時,判斷消息如果為".",回復一個消息即可。
    本文所給出的方法已在Windows XP系統、ASP.net3.5、IE7.0環境下測試通過。利用該方法也可以實現WebQQ的即時通信功能。利用Activex組件技術,可以很好地發揮B/S模式與C/S模式的雙重優點,采用混合工作模式及合理的功能配制,克服單一的B/S模式或單一C/S模式安全與效率、功能與應用的多種矛盾與不足,為開發一個完善的應用系統提供借鑒。將ActiveX技術應用于B/S監控軟件中,不僅增強了B/S監控軟件的功能,加快了軟件的開發速度,而且適應了當前軟件開發向模塊化、開放化發展的趨勢,提高了系統的實時性、可靠性和可擴展性。ActiveX技術應用于B/S模式彌補了單B/S模式的不足,比B/S和C/S結合的方式簡單實用(不需要安裝C/S客戶端),可以用在商業化的在線殺毒、在線點播、在線考試等諸多領域,具有較大的應用參考價值。
參考文獻
[1]  鄭健,庖丁解牛.縱向切入ASP.NET 3.5控件和組件開發技術(第一版)[M].北京:電子工業出版社,2009.
[2]  (美)伊夫杰等. ASP.NET 3.5高級編程(第5版)[M].北京:清華大學出版社,2008.
[3]  (美)杰瑞夫(Jeffrey, J.)等. Windows核心編程(第5版)[M].北京:清華大學出版社,2008.
[4]  (美) 維埃拉,董明.SQL Server 2005高級程序設計(第一版)[M].北京:人民郵電出版社,2008.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          夜夜夜久久久| 在线视频国内自拍亚洲视频| 激情六月综合| 亚洲精品欧美精品| 亚洲精品极品| 一区免费观看视频| 性色av一区二区怡红| 欧美成人dvd在线视频| 欧美午夜理伦三级在线观看| 国产精品成人在线| 久久精品91久久香蕉加勒比| 欧美午夜精品理论片a级按摩| 影音先锋日韩有码| 欧美日韩一区二区三区四区在线观看| 欧美日韩一本到| 国产三级精品在线不卡| 在线亚洲欧美| 免费永久网站黄欧美| 国产一区欧美| 国产精品一区二区三区四区| 怡红院精品视频在线观看极品| 亚洲永久在线观看| 亚洲在线视频网站| 欧美日韩国产综合在线| 久久这里只有精品视频首页| 最新高清无码专区| 国产午夜精品在线观看| 欧美黑人在线观看| 国产精品大片免费观看| 日韩亚洲视频在线| 欧美二区乱c少妇| 欧美伦理一区二区| 国产亚洲欧美aaaa| 国产香蕉久久精品综合网| 欧美国产日本高清在线| 国产精品久久国产三级国电话系列| 国产精品久久| 欧美日韩你懂的| 亚洲影院免费观看| 久久久久久久久综合| 欧美精品亚洲一区二区在线播放| 欧美极品一区| 欧美日韩精品国产| 欧美三日本三级少妇三2023| 欧美性一区二区| 亚洲国产专区校园欧美| 欧美日本国产在线| 欧美性猛片xxxx免费看久爱| 欧美精品福利视频| 欧美一区二区成人| 国产午夜精品久久| 亚洲视频一区| 欧美激情一区二区| 欧美日韩精品三区| 国产精品久久久91| 欧美激情aⅴ一区二区三区| 久久精品人人做人人综合| 久久亚洲一区二区三区四区| 亚洲在线观看视频| 欧美日本网站| 在线观看欧美日本| 欧美日韩国产专区| 亚洲精品乱码久久久久久日本蜜臀| 欧美精品一区二区三区蜜桃| 国产精品久久久久久久久久免费看| 国产精品久久二区二区| 国产热re99久久6国产精品| 韩国av一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 国产视频一区欧美| 亚洲欧美视频在线观看视频| 99精品国产热久久91蜜凸| 欧美成人黑人xx视频免费观看| 国产欧美日韩综合一区在线播放| 在线国产亚洲欧美| 性色一区二区| 国产婷婷色一区二区三区四区| 日韩写真在线| 欧美mv日韩mv国产网站| 国产精品成人观看视频免费| 久久久噜噜噜久久中文字幕色伊伊| 欧美第十八页| 亚洲高清视频一区| 99re8这里有精品热视频免费| 亚洲欧美日本视频在线观看| 欧美日本高清视频| 欧美激情欧美激情在线五月| 最新日韩在线| 欧美深夜福利| 亚洲一区二区三区在线看| 国产一区二区三区四区| 国产人妖伪娘一区91| 一区二区三区你懂的| 国产精品丝袜91| 国产精品久久7| 国产精品萝li| 亚洲精品四区| 国产尤物精品| 一本一道久久综合狠狠老精东影业| 日韩视频永久免费观看| 亚洲美女av在线播放| 国产精品亚洲综合天堂夜夜| 91久久精品日日躁夜夜躁国产| 国产精品视频免费观看| 国产精品有限公司| 久久久噜久噜久久综合| 亚洲欧美国产77777| 久久午夜电影| 亚洲一区影音先锋| 午夜精品久久久| 亚洲国产欧美不卡在线观看| 久久久国产精品一区二区三区| 99视频精品在线| 亚洲一区二区精品在线观看| 亚洲福利国产| 美女任你摸久久| 国产精品美女视频网站| 欧美一区二区女人| 国产精品亚洲不卡a| 黑人巨大精品欧美一区二区小视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美性猛交一区二区三区精品| 在线观看视频一区二区| 亚洲愉拍自拍另类高清精品| 欧美精品大片| 欧美日韩免费观看一区=区三区| 亚洲黄色免费网站| 国产农村妇女精品| 欧美亚洲一区| 91久久嫩草影院一区二区| 欧美激情一区二区三区全黄| 国产专区综合网| 久久精品国产精品亚洲| 欧美日韩1区2区3区| 亚洲人成在线影院| 美女爽到呻吟久久久久| 一区二区三区回区在观看免费视频| 国产精品腿扒开做爽爽爽挤奶网站| 欧美一区二区成人| 夜夜嗨av色综合久久久综合网| 欧美日韩福利| 欧美电影在线免费观看网站| 国产午夜精品视频免费不卡69堂| 亚洲国产欧美一区二区三区久久| 欧美精品激情在线观看| 亚洲每日在线| 亚洲欧美成人一区二区三区| 国产精品女主播在线观看| 国产精品久久久一区二区| 亚洲第一视频| 日韩视频一区二区三区| 欧美成人午夜免费视在线看片| 久久精品99久久香蕉国产色戒| 99re6热只有精品免费观看| 欧美经典一区二区三区| 亚洲激情视频网| 久久久一区二区三区| 国产欧美日韩一区二区三区在线| 99riav久久精品riav| 久久亚洲二区| 久久亚洲国产精品日日av夜夜| 怡红院精品视频在线观看极品| 欧美色欧美亚洲高清在线视频| 欧美成人精品| 亚洲精品乱码久久久久久按摩观| 99精品国产99久久久久久福利| 国产精品久久久久影院亚瑟| 日韩视频精品在线| 欧美亚洲日本国产| 亚洲欧美激情一区二区| 亚洲一区二区三区在线看| 欧美国产大片| 性刺激综合网| 国产精品久久久久久妇女6080| 91久久精品国产91久久| 欧美视频精品在线观看| 国产嫩草影院久久久久| 欧美影院在线播放| 国产日韩欧美在线播放不卡| 欧美日韩国产区| 99人久久精品视频最新地址| 久久久久国产一区二区| 日韩一级欧洲| 亚洲欧洲美洲综合色网| 在线看欧美视频| 亚洲一区精品视频| 欧美日韩一级大片网址| 欧美刺激午夜性久久久久久久| 欧美四级伦理在线| 国产亚洲毛片在线| 欧美午夜激情视频| 久久久久一区二区| 久久精品在线免费观看| 激情小说亚洲一区| 久久综合久久美利坚合众国| 国产亚洲精品久久久久婷婷瑜伽| 国内成人自拍视频| 欧美激情成人在线| 黄色亚洲免费| 亚洲国产精品免费| 欧美午夜在线观看| 先锋a资源在线看亚洲| 国产喷白浆一区二区三区| 国产综合色精品一区二区三区| 欧美大片一区二区| 欧美四级在线| 亚洲国产91色在线| 久久夜色精品国产欧美乱| 国产精品高潮视频| 在线播放亚洲| 久久黄金**| 国产精品乱码一区二三区小蝌蚪| 99在线精品视频在线观看| 欧美精品手机在线| 欧美色中文字幕| 亚洲精品中文在线| 亚洲视屏在线播放| 含羞草久久爱69一区| 亚洲免费视频一区二区| 亚洲综合国产激情另类一区| 欧美裸体一区二区三区| 国产日韩一区欧美| 狠久久av成人天堂| 欧美四级剧情无删版影片| 欧美久久成人| 免费人成网站在线观看欧美高清| 国产亚洲欧美激情| 国产精自产拍久久久久久| 欧美日韩综合精品| 欧美日韩国产精品一区二区亚洲| 久久国产免费看| 国外成人在线视频| 亚洲第一福利视频| 亚洲性人人天天夜夜摸| 国产一区二区久久| 欧美日本乱大交xxxxx| 国产精品扒开腿做爽爽爽软件| 亚洲永久免费| 欧美视频一区| 一本高清dvd不卡在线观看| 欧美剧在线免费观看网站| 国产日韩欧美高清免费| 红杏aⅴ成人免费视频| 亚洲欧美日韩精品一区二区| 久久综合给合久久狠狠狠97色69| 欧美日韩中文字幕在线视频| 亚洲男女自偷自拍图片另类| 国产精品日韩欧美一区二区| 欧美日韩国产二区| 欧美性猛交xxxx免费看久久久| 亚洲国语精品自产拍在线观看| 国产欧美精品xxxx另类| 久久久www免费人成黑人精品| 久久亚洲不卡| 在线观看成人小视频| 国产日韩欧美精品在线| 国产日产欧美a一级在线| 久久综合中文色婷婷| 免费久久99精品国产自| 亚洲国产高清高潮精品美女| 亚洲高清色综合| 噜噜噜躁狠狠躁狠狠精品视频| 国产拍揄自揄精品视频麻豆| 欧美日韩免费高清一区色橹橹| 亚洲综合成人婷婷小说| 欧美日韩精品免费| 久久久久久久一区二区三区| 亚洲素人在线| 国产精品久久久久久超碰| 久久夜色精品国产欧美乱| 久久婷婷久久| 亚洲一区二区免费在线| 国产欧美1区2区3区| 欧美另类在线观看| 亚洲日本理论电影| 99热精品在线| 久久狠狠一本精品综合网| 亚洲电影在线免费观看| 欧美激情亚洲自拍| 亚洲视频一区在线观看| 欧美—级高清免费播放| 久久亚洲图片| 欧美网站大全在线观看| 国产精品美女久久久久aⅴ国产馆| 欧美日韩午夜在线视频| 亚洲女性喷水在线观看一区| 亚洲男人的天堂在线aⅴ视频| 欧美精品v日韩精品v韩国精品v| 日韩视频免费观看高清在线视频| 夜夜狂射影院欧美极品| 欧美激情视频在线免费观看 欧美视频免费一| 欧美视频一区二| 精东粉嫩av免费一区二区三区| 国产精品免费一区二区三区观看| 久久久精品国产99久久精品芒果| 亚洲国产精品成人va在线观看| 亚洲欧洲一区| 欧美在线|欧美| 99热这里只有成人精品国产| 欧美成人免费视频| 欧美日韩免费一区二区三区| 夜夜嗨一区二区| 午夜精品久久久久久久| 亚洲最新中文字幕| 一区二区三区精品在线| 久久精品国产亚洲精品| 在线国产精品一区| 午夜精品99久久免费| 校园激情久久| 国产精品久久777777毛茸茸| 99国产精品久久久久久久| 免费欧美在线| 久久久久久夜精品精品免费| 一区二区高清视频| 欧美日本不卡高清| 国内精品一区二区三区| 先锋影院在线亚洲| 亚洲国产视频a| 一本色道久久综合精品竹菊| 亚洲国产精品999| 欧美r片在线| 亚洲精品国产拍免费91在线| 国产原创一区二区| 韩国三级电影一区二区| 欧美中文字幕视频在线观看| 99国产精品99久久久久久粉嫩| 国产日韩精品一区二区| 国产一区91精品张津瑜|