freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于p2p技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線-資料下載頁

2025-07-27 05:03本頁面
  

【正文】 ckets接口既能夠在單線程的Windows版本又能夠在占先的多線程Windows版本(Windows NT)中使用,在多線程環(huán)境中,套接口接口基本上是不變的。但多線程應(yīng)用程序必須在線程之間同步對(duì)套接口的使用。這一點(diǎn)在其他形式的I/O中管理,例如文件I/O中是一樣的。如果沒有對(duì)套接口調(diào)用進(jìn)行同步就會(huì)導(dǎo)致不可預(yù)測(cè)的結(jié)果。例如,如果有兩個(gè)線程同時(shí)調(diào)用同一套接口進(jìn)行send(),那么數(shù)據(jù)發(fā)送的先后順序就無法保證了。在一個(gè)線程中關(guān)閉一個(gè)未完成的阻塞的套接口將會(huì)導(dǎo)致另一個(gè)線程使用同一套接口的阻塞調(diào)用出錯(cuò)返回,就象操作被取消一樣。因此,采用多線程技術(shù)的同時(shí),也必須解決好線程間的同步與通信問題。2. 線程之間的通信:通常情況下,一個(gè)次級(jí)線程要為主線程完成某種特定類型的任務(wù),這就隱含著表示在主線程和次級(jí)線程之間需要建立一個(gè)通信的通道。系統(tǒng)采用使用事件對(duì)象和使用消息來完成這個(gè)任務(wù)。1)利用用戶定義的消息通信由于本應(yīng)用程序的每一個(gè)線程它都擁有自己的消息隊(duì)列,這樣一來,就可以利用消息來傳遞信息而使得線程之間的通信易于實(shí)現(xiàn)。首先用戶要定義一個(gè)用戶消息,在使用時(shí),向另外一個(gè)線程發(fā)送這個(gè)消息。下面的代碼是在線程結(jié)束時(shí)給出提示,使線程結(jié)束:UINT ThreadFunction(LPVOID pParam){while(!bend){Beep(100,100)。Sleep(1000)。}基于P2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)32::PostMessage(hWnd,WM_USERMSG,0,0);return 0。}WM_USERMSG消息的響應(yīng)函數(shù)為:OnThreadended(WPARAM wParam,LPARAM lParam)LONG CTestView::OnThreadended(WPARAM wParam,LPARAM lParam){AfxMessageBox(Thread ended.)。Retrun 0。}以上是系統(tǒng)線程向用戶界面線程發(fā)送消息,對(duì)于工作者線程,如果它的設(shè)計(jì)模式也是消息驅(qū)動(dòng)的,那么調(diào)用者可以向它發(fā)送初始化、退出、執(zhí)行某種特定的處理等消息,讓它在后臺(tái)完成。在控制函數(shù)中可以直接使用GetMessage()這個(gè)SDK函數(shù)進(jìn)行消息分檢和處理,自己實(shí)現(xiàn)一個(gè)消息循環(huán)。GetMessage()函數(shù)在判斷該線程的消息隊(duì)列為空時(shí),線程將系統(tǒng)分配給它的時(shí)間片讓給其它線程,不無效的占用CPU的時(shí)間,如果消息隊(duì)列不為空,就獲取這個(gè)消息,判斷這個(gè)消息的內(nèi)容并進(jìn)行相應(yīng)的處理。2)用事件對(duì)象實(shí)現(xiàn)通信在線程之間傳遞信號(hào)進(jìn)行通信比較復(fù)雜的方法是使用事件對(duì)象,用MFC的Cevent類的對(duì)象來表示。事件對(duì)象處于兩種狀態(tài)之一:有信號(hào)和無信號(hào),線程可以監(jiān)視處于有信號(hào)狀態(tài)的事件,以便在適當(dāng)?shù)臅r(shí)候執(zhí)行對(duì)事件的操作。3.線程之間的同步各個(gè)線程可以訪問進(jìn)程中的公共變量,所以使用多線程的過程中需要注意的問題是如何防止兩個(gè)或兩個(gè)以上的線程同時(shí)訪問同一個(gè)數(shù)據(jù),以免破壞數(shù)據(jù)的完整性。保證各個(gè)線程可以在一起適當(dāng)?shù)膮f(xié)調(diào)工作稱為線程之間的同步。前面一節(jié)闡述的事件對(duì)象實(shí)際上就是一種同步形式。Visual C++中使用同步類來解決操作系統(tǒng)的并行性而引起的數(shù)據(jù)不安全的問題,MFC支持的七個(gè)多線程的同步類可以分成兩大類:同步對(duì)象(CsyncObject、Csemaphore、Cmutex、CcriticalSection和Cevent)和同步訪問對(duì)象(CmultiLock和CsingleLock)。本課題使用下面的同步對(duì)象來使各個(gè)線程協(xié)調(diào)工作,使程序運(yùn)行起來更加安全。1)使用臨界區(qū)對(duì)象:臨界區(qū)是保證在某一個(gè)時(shí)間只有一個(gè)線程可以訪問數(shù)據(jù)的方法。使用它的過程基于P2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)33中,需要給各個(gè)線程提供一個(gè)共享的臨界區(qū)對(duì)象,無論哪個(gè)線程占有臨界區(qū)對(duì)象,都可以訪問受到保護(hù)的數(shù)據(jù),這時(shí)候其它的線程需要等待,直到該線程釋放臨界區(qū)對(duì)象為止。2)使用互斥對(duì)象:互斥與臨界區(qū)很相似,但是使用時(shí)相對(duì)復(fù)雜一些,它不僅可以在同一應(yīng)用程序的線程間實(shí)現(xiàn)同步,還可以在不同的進(jìn)程間實(shí)現(xiàn)同步,從而實(shí)現(xiàn)資源的安全共享。3)使用信號(hào)量對(duì)象:信號(hào)量的用法和互斥的用法很相似,但它實(shí)現(xiàn)計(jì)數(shù)處理。不同的是它可以同一時(shí)刻允許多個(gè)線程訪問同一個(gè)資源,創(chuàng)建一個(gè)信號(hào)量需要用Csemaphore類聲明一個(gè)對(duì)象,一旦創(chuàng)建了一個(gè)信號(hào)量對(duì)象,就可以用它來對(duì)資源的訪問技術(shù)。 通信模塊規(guī)劃由于系統(tǒng)通信技術(shù)的復(fù)雜性,本系統(tǒng)的實(shí)際開發(fā)分兩個(gè)階段。第一個(gè)階段開發(fā)測(cè)試版本,這個(gè)階段的主要任務(wù),主要是解決通信技術(shù)問題,以把握P2P通信的流暢性、準(zhǔn)確性。第二個(gè)階段則是功能開發(fā)為主,解決實(shí)時(shí)“在線課堂”的功能實(shí)現(xiàn)部分。在第一階段里,由于技術(shù)的底層性,我們將P2P通信的實(shí)現(xiàn)都以Visual C++二次開發(fā)類庫和基于COM的ActiveX控件的形式通過網(wǎng)上公布的方式提供給客戶。 程序模塊劃分本應(yīng)用程序不論是從通信PC的功能角色(如中間服務(wù)器和子節(jié)點(diǎn))來劃分,還是從程序模塊完成的功能(如發(fā)送方和接收方)來劃分,從實(shí)現(xiàn)機(jī)制的邏輯而言,其通信的完成都是基于C/S模型的請(qǐng)求與響應(yīng)機(jī)制的,如下圖所示: C/S模型通信機(jī)制基于P2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)34為了不使混淆C/S模式下與P2P模式下的服務(wù)器(客戶機(jī))概念,本文中對(duì)前者使用“中間服務(wù)器”與“子節(jié)點(diǎn)” 的稱呼,而對(duì)后者以“服務(wù)器”和“客戶方”稱呼。本應(yīng)用程序邏輯模塊的劃分如下:客戶端連接請(qǐng)求模塊: C/S模式下,在子節(jié)點(diǎn)客戶方實(shí)現(xiàn)。處理客戶成為P2P網(wǎng)絡(luò)中合法的子節(jié)點(diǎn)的程序,對(duì)應(yīng)的上層功能包括用戶的注冊(cè)、登錄連接等;服務(wù)器連接響應(yīng)模塊: C/S模式下,在中間服務(wù)器端實(shí)現(xiàn),處理客戶的連接請(qǐng)求,包括TCP方式的和UDP方式的;TCP服務(wù)器: C/S模式下,在中間服務(wù)器端實(shí)現(xiàn),處理客戶TCP連接請(qǐng)求;UDP服務(wù)器: C/S模式下和P2P模式下均有實(shí)現(xiàn)。C/S模式下,在中間服務(wù)器端的實(shí)現(xiàn)部分響應(yīng)客戶的UDP請(qǐng)求,負(fù)責(zé)動(dòng)態(tài)維護(hù)客戶的身份認(rèn)證和子節(jié)點(diǎn)之間的信息關(guān)聯(lián),并不參與客戶信息的發(fā)送和接收;而在P2P模式下,則是基于“請(qǐng)求”和“響應(yīng)”機(jī)制的對(duì)等服務(wù)器,負(fù)責(zé)對(duì)等P2P客戶的消息發(fā)送和接收;TCP客戶方:C/S模式下,在子節(jié)點(diǎn)實(shí)現(xiàn),處理客戶方節(jié)點(diǎn)對(duì)成為P2P網(wǎng)絡(luò)節(jié)點(diǎn)的合法化請(qǐng)求;UDP客戶方:C/S模式下和P2P模式下均有實(shí)現(xiàn)。C/S模式下,處理子節(jié)點(diǎn)對(duì)中間服務(wù)器的UDP請(qǐng)求(不含客戶消息),P2P模式下,則完成對(duì)另一個(gè)P2P客戶的消息發(fā)送和接收,在這種模式下,客戶方與服務(wù)器方的角色是動(dòng)態(tài)改變的,每一個(gè)子節(jié)點(diǎn)都具有相同的地位。.程序邏輯結(jié)構(gòu)圖由上節(jié)對(duì)程序邏輯結(jié)構(gòu)的劃分和描述,得到如下的程序邏輯結(jié)構(gòu)和程序通信機(jī)制示意圖如下:基于P2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)35 程序邏輯結(jié)構(gòu)示意圖程序通信機(jī)制如下圖: 程序?qū)崿F(xiàn)的通信機(jī)制示意圖基于P2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)36第四章 在線課堂P2P通信層技術(shù)實(shí)現(xiàn)在第三章,本文已對(duì)整個(gè)P2P系統(tǒng)的程序?qū)嵤┓桨浮⒔Y(jié)構(gòu)與設(shè)計(jì)原則進(jìn)行了詳細(xì)的論述,因此本章不再贅述,而直接進(jìn)入P2P通信技術(shù)的實(shí)現(xiàn)。 TCP Sockets通信的實(shí)現(xiàn) 窗口的選擇策略窗口的管理對(duì)P2P 數(shù)據(jù)傳送的效率有很大影響。窗口機(jī)制是本系統(tǒng)在TCP 數(shù)據(jù)報(bào)的重發(fā)機(jī)制中為了提高網(wǎng)絡(luò)帶寬利用率而引入的。TCP 中每個(gè)數(shù)據(jù)段都包括下一個(gè)希望接收到的序列號(hào)。在研究中我們發(fā)現(xiàn),窗口比較大時(shí)會(huì)提高傳送速度,而如果傳送的數(shù)據(jù)超過窗口大小,數(shù)據(jù)會(huì)被拋棄。即使發(fā)送窗口大小為零,發(fā)送TCP 也必須做好準(zhǔn)備接收數(shù)據(jù)并且可以發(fā)送至少一位新數(shù)據(jù)。即使接收窗口為零,發(fā)送方也會(huì)重發(fā),重發(fā)的間隔時(shí)間一般為兩分鐘。如果一個(gè)P2P 的TCP 連接只有單向數(shù)據(jù)流,窗口信息可以在確認(rèn)信息中得到,這些的序列號(hào)都是一個(gè),因此沒法區(qū)別出誰先誰后。為此,本系統(tǒng)的采取下面的解決方案:當(dāng)使用較少的大數(shù)據(jù)而要獲得高效率時(shí)分配非常小的窗口使數(shù)據(jù)以許多小段傳送。對(duì)于發(fā)送者來說要避免在發(fā)送小數(shù)據(jù)段時(shí)必須等到窗口大到一定程度再進(jìn)行,以確認(rèn)不被延時(shí)。接收窗口如果大小為零時(shí),要傳送的數(shù)據(jù)段可能被分成越來越小的段。如果發(fā)送TCP 僅僅發(fā)送窗口允許大小的數(shù)據(jù)段,可能這些數(shù)據(jù)段會(huì)被換成比這個(gè)段大(或者?。┑臄?shù)據(jù)段發(fā)送。接收方時(shí)不時(shí)地進(jìn)行窗口大小調(diào)整會(huì)使大數(shù)據(jù)段分為小段,而不成對(duì)。因此,系統(tǒng)盡量把小的窗口合成大的窗口,在系統(tǒng)中,對(duì)窗口采用動(dòng)態(tài)的設(shè)置方式,即滑動(dòng)窗口來實(shí)現(xiàn)。這將在下一節(jié)中論述。 字節(jié)順序的轉(zhuǎn)換在本系統(tǒng)中,任何基于Windows Sockets 函數(shù)對(duì)IP 地址和端口號(hào)的引用和傳送給Windows Sockets 函數(shù)的IP 地址和端口號(hào)均是按照網(wǎng)絡(luò)順序組織的,這也包括了sockaddr_in 結(jié)構(gòu)這一數(shù)據(jù)類型中的IP 地址域和端口域(但不包括sin_family 域)。但I(xiàn)ntel 處理器和Internet 的字節(jié)順序是不同的,因此,為保證系統(tǒng)在其他的WindowsSockets 實(shí)現(xiàn)的主機(jī)字節(jié)順序與網(wǎng)絡(luò)字節(jié)順序相同的機(jī)器上運(yùn)行,系統(tǒng)采取了字節(jié)順序的轉(zhuǎn)換措施。如果用戶輸入一個(gè)數(shù),而且指定使用這一端口號(hào),系統(tǒng)則在使用它建立地址以前,把它從主機(jī)順序轉(zhuǎn)換成網(wǎng)絡(luò)順序。相應(yīng)地,當(dāng)系統(tǒng)顯示包含于某一地址中的端口號(hào)(例如從getpeername()函數(shù)中返回的)時(shí),這一端口號(hào)就在被顯示前從網(wǎng)絡(luò)順序轉(zhuǎn)換到主機(jī)順序?;赑2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)37 TCP 通信的實(shí)現(xiàn)流程對(duì)于系統(tǒng)中要精確傳輸?shù)腤indows Sockets 數(shù)據(jù),采用流式套接字來實(shí)現(xiàn)。一方面,TCP 為兩臺(tái)主機(jī)提供了高可靠性的數(shù)據(jù)通信,它所做的工作只是把應(yīng)用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡(luò)層,確認(rèn)接收到的分組,設(shè)置發(fā)送最后確認(rèn)分組的超時(shí)時(shí)鐘等。而由于傳輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略這些細(xì)節(jié)。但另一方面,TCP 提供這樣好的服務(wù)也是有代價(jià)的,由于它是基于握手連接的,需要更多的CPU 處理時(shí)間和網(wǎng)絡(luò)帶寬,服務(wù)器處理的請(qǐng)求也往往比較復(fù)雜,不是一來一去的請(qǐng)求應(yīng)答所能解決的,而且往往是并發(fā)服務(wù)器。因此,TCP 模塊的復(fù)雜度也比UDP 大得多。發(fā)送TCP 消息使用流式套接口,面向連接使用面向連接的套接口編程,時(shí)序流程圖如下所示: TCP 連接的程序時(shí)序流程示意圖基于P2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)38流式套接口主要完成子節(jié)點(diǎn)與中間服務(wù)器的連接工作。工作流程大致如下:服務(wù)器首先啟動(dòng),通過調(diào)用socket()建立一個(gè)套接口( SOCK_STREAM),然后調(diào)用bind()將該套接口和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen()使套接口做好偵聽的準(zhǔn)備,并規(guī)定它的請(qǐng)求隊(duì)列的長(zhǎng)度,之后就調(diào)用accept()來接收連接??蛻粼诮⑻捉涌诤缶涂烧{(diào)用connect()和服務(wù)器建立連接。連接一旦建立,客戶機(jī)和服務(wù)器之間就可以通過調(diào)用read()和write()來發(fā)送和接收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()關(guān)閉套接口。 中間服務(wù)器的TCP 有效性設(shè)計(jì) 協(xié)議的選擇比較UDP 包和TCP 包的結(jié)構(gòu),很明顯UDP 包不具備TCP 包復(fù)雜的可靠性與控制機(jī)制。與TCP 協(xié)議相同,UDP 的源端口數(shù)和目的端口數(shù)也都支持一臺(tái)主機(jī)上的多個(gè)應(yīng)用。在本系統(tǒng)中,當(dāng)強(qiáng)調(diào)傳輸性能而不是傳輸?shù)耐暾詴r(shí),如:用戶級(jí)消息、音頻和多媒體應(yīng)用,UDP 是最好的選擇。因?yàn)閁DP 較低的開銷使其有更好的機(jī)會(huì)去傳送系統(tǒng)的管理數(shù)據(jù),從而降低系統(tǒng)網(wǎng)絡(luò)的擁塞機(jī)率。但是,當(dāng)數(shù)據(jù)傳輸?shù)男阅鼙仨氉屛挥跀?shù)據(jù)傳輸?shù)耐暾?、可控制性和可靠性時(shí),TCP 協(xié)議則是當(dāng)然的選擇。因此,本系統(tǒng)的中間服務(wù)器在用戶的最初連接中采取TCP方式,TCP 方式的握手機(jī)制可使本系統(tǒng)的中間服務(wù)器提供最高效率的可靠性。但另一方面,TCP 豐富的功能復(fù)雜的握手機(jī)制有時(shí)也會(huì)導(dǎo)致不可預(yù)料的性能低下。因此,系統(tǒng)一方面保持了TCP 通信的優(yōu)越性,另一方面對(duì)中間服務(wù)器的TCP 連接也進(jìn)行了有效性的設(shè)計(jì),以保證中間服務(wù)器的穩(wěn)定。 定時(shí)器與滑動(dòng)窗口的動(dòng)態(tài)設(shè)置方案1.問題的提出:定時(shí)器用于系統(tǒng)數(shù)據(jù)的重發(fā)機(jī)制中。系統(tǒng)TCP 的傳輸中設(shè)置有多個(gè)定時(shí)器,當(dāng)一個(gè)包發(fā)送時(shí),重發(fā)定時(shí)器開始計(jì)數(shù);當(dāng)收到確認(rèn)信號(hào)后,重發(fā)定時(shí)器停止計(jì)數(shù)。如果超過設(shè)定時(shí)間段還沒有收到確認(rèn)信號(hào),就重發(fā)該包。但一個(gè)比較棘手的問題是:如果該段時(shí)間設(shè)置太長(zhǎng),那么當(dāng)網(wǎng)絡(luò)傳輸錯(cuò)誤增加時(shí)就將導(dǎo)致不必要的等待時(shí)間;如果太短,就會(huì)產(chǎn)生過多的重復(fù)包從而降低網(wǎng)絡(luò)的反應(yīng)時(shí)間。從而,中間服務(wù)器的工作效率將大大降低。為解決這一矛盾,系統(tǒng)采取了如下方案?;赑2P 技術(shù)模式的民辦高校遠(yuǎn)程教學(xué)系統(tǒng)及在線課堂軟件的研究與實(shí)現(xiàn)392.解決方案:為解決上述矛盾,系統(tǒng)采取持續(xù)定時(shí)器與滑動(dòng)窗口的動(dòng)態(tài)設(shè)置方案?;瑒?dòng)窗口的工作機(jī)制如下圖所示: 滑動(dòng)窗口的動(dòng)態(tài)設(shè)置示意圖在這一用例中,共有8 個(gè)幀處于待發(fā)送狀態(tài),發(fā)送窗口值設(shè)置為5。當(dāng)發(fā)送端發(fā)送0— 4 號(hào)幀后,如果持續(xù)定時(shí)器沒有檢測(cè)到回送的確認(rèn)數(shù)據(jù)幀,就立即停止等待;如果收到確認(rèn)幀,那么就對(duì)發(fā)送窗口值進(jìn)行重新設(shè)置,使它沿順時(shí)針方向旋轉(zhuǎn)一個(gè)號(hào),使窗口后沿再次與一個(gè)未被確認(rèn)的幀號(hào)相鄰,這時(shí)5 號(hào)幀也落在了窗口之內(nèi),就可以發(fā)送了。接下來,如果持續(xù)定時(shí)器又檢測(cè)到三個(gè)確認(rèn)幀,那么發(fā)送窗口在次旋轉(zhuǎn)3 格,這樣就可以依次發(fā)送7 和0 號(hào)幀了。如果客戶端收到了一個(gè)大小為0 的窗口確認(rèn)并且丟失了隨后的重發(fā)數(shù)據(jù)的
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1