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

正文內(nèi)容

linux環(huán)境下多媒體教學(xué)系統(tǒng)的設(shè)計與實現(xiàn)的學(xué)士學(xué)位畢業(yè)論文(編輯修改稿)

2025-07-16 14:14 本頁面
 

【文章內(nèi)容簡介】 guchar ClientIP[NET_IPLEN]。 // IP地址 guchar ClientHost[NET_HOSTLEN]。 // 主機名 guchar ClientName[NET_NAMELEN]。 // 用戶名(姓名) guchar ClientID[NET_IDLEN]。 // 用戶標(biāo)識(學(xué)號)}CLIENTINFO, *PCLIENTINFO。學(xué)生端信息數(shù)據(jù)結(jié)構(gòu)如下:typedef struct tagCLISTCLIENTINFO{ gboolean bSelected。 // 該學(xué)生端是否被選中 gint iState。 // 該學(xué)生端的狀態(tài) CLIENTINFO ClientInfo。} CLISTCLIENTINFO, *PCLISTCLIENTINFO。學(xué)生端信息列表數(shù)據(jù)結(jié)構(gòu)如下:typedef struct tagCLISTINFO{ pthread_mutex_t Mutex。 // 互斥鎖 CLISTCLIENTINFO ClistClinetInfo[THREAD_MAXCLIENT]。 // 學(xué)生端信息列表 gint iCnt。 // 列表中學(xué)生端的數(shù)量} CLISTINFO, *PCLISTINFO。學(xué)生端的狀態(tài)定義為以下幾種:define CLIST_STATE_UNUSED 0x00 // 未使用define CLIST_STATE_ONLINE 0x01 // 在線define CLIST_STATE_SCREENBROADCAST 0x02 // 屏幕廣播中define CLIST_STATE_REMOTECONTROL 0x03 // 遠(yuǎn)程控制中與指令隊列相同,學(xué)生端信息列表也是全局的,考慮到線程同步,因此所有對該列表的操作必須先使用pthread_mutex_lock( amp。() )將列表鎖定,然后才能進(jìn)行具體操作,操作結(jié)束后,必須使用pthread_mutex_unlock( amp。( ) )將列表解鎖。對學(xué)生端信息列表的操作有:gint afxAddToClistInfo( PCLISTINFO pClistInfo, PCLIENTINFO pClientInfo )。 // 向?qū)W生端信息列表中增加一個學(xué)生端信息gint afxRemoveFromClistInfo( PCLISTINFO pClistInfo,PCLIENTINFO pClientInfo )。 // 從學(xué)生端信息列表中刪除一個學(xué)生端信息gint afxSelectInClistInfo( PCLISTINFO pClistInfo, gchar *pcIP )。 // 將學(xué)生端信息列表中IP為pcIP的學(xué)生端標(biāo)記為選中g(shù)int afxUnSelectInClistInfo( PCLISTINFO pClistInfo, gchar *pcIP )。 // 將學(xué)生端信息列表中IP為pcIP的學(xué)生端解除選中g(shù)int afxGetCntInClistInfo( PCLISTINFO pClistInfo )。 // 獲得學(xué)生端信息列表中學(xué)生端的數(shù)量以下的操作以學(xué)生端信息列表為參考,對指令隊列進(jìn)行操作:gint afxSendMessageToSelectedClient( PCLISTINFO pClistInfo, PMESSAGEQUEUE pMessageQueue, PMESSAGE pMessage )。 // 向標(biāo)記為選中的學(xué)生端發(fā)送指令gint afxSendMessageToAllClient( PCLISTINFO pClistInfo, PMESSAGEQUEUEpMessageQueue, PMESSAGE pMessage )。 // 向所有的學(xué)生端發(fā)送指令gint afxSendMessageToSrcBtClient( PCLISTINFO pClistInfo, PMESSAGEQUEUE pMessageQueue, PMESSAGE pMessage )。 // 向正在接收屏幕廣播的學(xué)生端發(fā)送指令gint afxSendMessageToRmtCtrlClient( PCLISTINFO pClistInfo, PMESSAGEQUEUE pMessageQueue, PMESSAGE pMessage )。 // 向正在被遠(yuǎn)程控制的學(xué)生端發(fā)送指令 命令控制模塊 教師端命令控制模塊該模塊實際上是一個TCP服務(wù)端線程,負(fù)責(zé)管理學(xué)生端的連接,保存學(xué)生端信息,響應(yīng)學(xué)生端請求,或從控制指令隊列中取出指令,解析后發(fā)送相應(yīng)的指令給學(xué)生端或者界面控制模塊。由于學(xué)生端數(shù)量較多——可能會有100個以上,若為每一個學(xué)生端創(chuàng)建一個服務(wù)線程,則線程之間的頻繁切換會使整個系統(tǒng)的效率變得很低,所以放棄了采用多線程的并發(fā)連接服務(wù)器算法,而采用了單線程的并發(fā)服務(wù)器算法。 并發(fā)服務(wù)器算法。以下是教師端命令控制模塊的總框架:void* thread_TCPServer_main( void *arg ){ 初始化 …… while ( …… ) { 每隔一段時間通知所有學(xué)生端:教師端仍處于活動狀態(tài)(用于超時檢測) select( iFDMax + 1, amp。ReadFDSet, amp。WriteFDSet, NULL, NULL )。 if ( FD_ISSET( iListenSocketFD, amp。ReadFDSet ) ) // 如果有學(xué)生端連接 { iConnectSocketFD = accept( iListenSocketFD, (struct sockaddr*)amp。ClientAddr, amp。iAddrlen )。 // 接受該連接 處理學(xué)生端的連接信息 } for ( k = 0。 k = iClientMax。 k++ ) { if ( 該學(xué)生端超時 ) { 關(guān)閉該學(xué)生端的socket連接 if ( 教師端正在廣播 ) { if ( 沒有學(xué)生端在線 ) { 關(guān)閉圖像發(fā)送線程 } } if ( 正在遠(yuǎn)程控制 ) { 關(guān)閉圖像接收線程 } 從學(xué)生端信息列表中刪除該學(xué)生端 } if ( FD_ISSET( iClientSocketFD, amp。WriteFDSet ) ) // 如果可以向該學(xué)生端發(fā)送指令 { if ( !afxPeekMessage( amp。afxCommandQ, amp。Message ) ) // 如果控制指令隊列里有指令 { if ( 如果該指令是發(fā)送給當(dāng)前學(xué)生端的 ) { afxGetMessage( amp。afxCommandQ, amp。Message )。 // 取得該指令 switch ( ) { // 根據(jù)不同的控制指令做相應(yīng)的處理 ……: } send( iClientSocketFD, amp。CommandPackWrite, NET_COMMANDPACKSIZE, 0 )。 // 向?qū)W生端發(fā)出相應(yīng)的控制指令 } else { if ( 該指令的發(fā)送對象已經(jīng)斷開連接 ) { afxGetMessage( amp。afxCommandQ, NULL )。 // 該指令作廢 } } } } if ( FD_ISSET( iClientSocketFD, amp。ReadFDSet ) ) // 如果有來自學(xué)生端的指令 { recv( iClientSocketFD, amp。CommandPackRead, NET_COMMANDPACKSIZE, 0 )。 // 接收該指令 switch ( ) { // 根據(jù)接收到的不同的指令做相應(yīng)的處理 …… } } } } 關(guān)閉所有socket} 學(xué)生端命令控制模塊與教師端命令控制模塊相對應(yīng)的,該模塊實際上是一個TCP客戶端線程,負(fù)責(zé)響應(yīng)教師端的指令,解析后發(fā)送相應(yīng)的指令給教師端或者界面控制模塊。以下是學(xué)生端命令控制模塊的總框架:void* thread_TCPClient_main( void *arg ){ 初始化 …… while ( …… ) { recv( iConnectSocketFD, amp。CommandPack, NET_COMMANDPACKSIZE, 0 )。 // 接收指令 if ( 接收錯誤 ) { if ( 服務(wù)端尚未超時 ) { 再次嘗試接收 } 服務(wù)端超時 if ( 正在遠(yuǎn)程控制 ) { 關(guān)閉圖像發(fā)送線程 } if ( 正在屏幕廣播 ) { 關(guān)閉圖像接收線程 } 關(guān)閉連接。 多次嘗試重新建立連接 if ( 發(fā)生致命錯誤 ) { 重啟計算機 } } 每隔一段時間通知教師端:學(xué)生端仍處于活動狀態(tài)(用于超時檢測) switch ( ) { // 根據(jù)教師端發(fā)來的指令做相應(yīng)的操作 …… } }} 控制指令教師端與學(xué)生端使用控制指令進(jìn)行通信,這些指令在網(wǎng)絡(luò)上傳送時與它們在控制指令隊列里的數(shù)據(jù)結(jié)構(gòu)有些不同,附帶數(shù)據(jù)最多只有一個,其數(shù)據(jù)結(jié)構(gòu)如下:typedef struct tagCOMMANDPACK{ guint32 ui32CommandPackLen。 // 指令的字節(jié)長度 gint32 iCommand。 // 指令類型標(biāo)識 union { guchar pucDataBuff[256 8]。 CLIENTINFO ClientInfo。 // 學(xué)生登錄信息 SCREENAREA ScreenAreaToShow。 // 顯示圖像大小 SCREENAREA ScreenAreaToShot。 // 截屏大小 MOUSEEVENT Mouse。 // 鼠標(biāo)事件 KEYEVENT Key。 // 鍵盤事件 } Data。 // 附帶數(shù)據(jù)} COMMANDPACK, *PCOMMANDPACK。下面具體介紹一下相關(guān)指令及其附帶數(shù)據(jù):教師端發(fā)送的控制指令COMMAND_RECVHSCRN_START 開始接收圖像COMMAND_RECVSCRN_END 結(jié)束接收圖像COMMAND_SENDHSCRN_START 開始發(fā)送圖像COMMAND_SENDSCRN_END 結(jié)束發(fā)送圖像COMMAND_POWEROFF 關(guān)機COMMAND_REBOOT 重啟COMMAND_MOUSE 鼠標(biāo)事件COMMAND_KEYBOARD 鍵盤事件COMMAND_ENQUIRY 通知學(xué)生端:教師端仍處于活動狀態(tài)其中:COMMAND_RECVHSCRN_START附帶顯示圖像的大小COMMAND_SENDHSCRN_START附帶抓屏的大小它們的數(shù)據(jù)結(jié)構(gòu)為:typedef struct tagSCREENAREA{ guint16 ui16Width。 // 寬 guint16 ui16Height。 // 高} SCREENAREA, *PSCREENAREA。COMMAND_MOUSE附帶鼠標(biāo)事件,其數(shù)據(jù)結(jié)構(gòu)為:typedef struct tagMOUSEEVENT{ guint16 ui16X。 // 鼠標(biāo)X坐標(biāo) guint16 ui16Y。 // 鼠標(biāo)Y坐標(biāo) guint16 ui16Event。 // 鼠標(biāo)事件信息 guint16 ui16Reserved。 // 保留} MOUSEEVENT, *PMOUSEEVENT。鼠標(biāo)事件信息定義了以下幾種:define MOUSE_LEFTPRESS 0x01 // 左鍵按下define MOUSE_LEFTRELEASE 0x02 // 左鍵放開define MOUSE_RIGHTPRESS 0x03 // 右鍵按下define MOUSE_RIGHTRELEASE 0x04 // 右鍵放開define MOUSE_MOVE 0x06 // 鼠標(biāo)移動COMMAND_ KEYBOARD附帶鍵盤事件,其數(shù)據(jù)結(jié)構(gòu)為:typedef struct tagKEYEVENT{ guint16 ui16KeyCode。 // 按鍵掃描碼 guint16 ui16Event。 // 按鍵事件信息} KEYEVENT, *PKEYEVENT。按鍵事件信息定義了以下幾種:define KEY_PRESS
點擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1