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

正文內(nèi)容

基于mfc的簡(jiǎn)易聊天室(編輯修改稿)

2024-12-18 15:14 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 OnInitDialog。在所有對(duì)話(huà)框控件建立且在對(duì)話(huà)框顯示之前,調(diào)用OnInitDialog。 在模態(tài)對(duì)話(huà)框與非模態(tài)對(duì)話(huà)框執(zhí)行的任意時(shí)刻都可以調(diào) CWnd::UpdateData。 如果要手工創(chuàng)建對(duì)話(huà)框,應(yīng)為對(duì)話(huà)框派生類(lèi)添加必需的成員變量,并添加已獲得數(shù)據(jù)值的成員函數(shù)。 關(guān)于 ClassWizard 的更多信息,請(qǐng)參閱聯(lián)機(jī)文檔 “Visual C++程序員指南 ”中的 “使 第 5 頁(yè) 用 ClassWizard”。 當(dāng)用戶(hù)按下 OK 或 Cancel 按鈕,或者調(diào)用 EndDialog 時(shí),模態(tài)對(duì)話(huà)框自動(dòng)關(guān)閉。 CAsyncsocket 類(lèi)和 CSocket 類(lèi) Cssyncsocket 類(lèi)一個(gè)異步非阻塞 Socket 類(lèi)封裝類(lèi) , CasyncSocket::Create()有一個(gè)參數(shù)指明了你想要處理那些 Socket 事件 , 你關(guān)心的事件被指定以后 , 這個(gè) Socket 默認(rèn)就被用做了異步方式 .的函數(shù) ,除了一個(gè)以外 , 在創(chuàng)建了一個(gè) CSocketWnd 窗口對(duì)象 ,使 WSAAsyncSlecet()將這個(gè) SOCKET 與該窗口對(duì)象關(guān)聯(lián) ,以讓該窗口對(duì)象處理來(lái)自 Socket 的事件 (消息 ), 然而CSocketWnd 收到 Socket 事件之, 只是簡(jiǎn)單地回 CasyncSocket::OnReceive()等虛函數(shù) 。 所以CAsyncSocket 的派生類(lèi) , 只需要在這些虛函數(shù)里添加發(fā)送和接收的代 碼 。 CSocket 是 MFC CAsyncSocket 基礎(chǔ)上派生的一個(gè)同步阻塞 Socket 的封裝類(lèi)。 構(gòu)造一個(gè) CAsyncSocket 對(duì)象并使用該對(duì)象創(chuàng)建基礎(chǔ) SOCKET 句柄 [2]。 套接字的創(chuàng)建遵循兩階段構(gòu)造的 MFC 模式。 例如 : CAsyncSocket sock。( )。 // Use the default parameters CAsyncSocket* pSocket = new CAsyncSocket。 int nPort = 27。 pSocket Create( nPort, SOCK_DGRAM )。 上面的第一個(gè)構(gòu)造函數(shù)在堆棧上創(chuàng)建一 個(gè) CAsyncSocket 對(duì)象,第二個(gè)構(gòu)造函數(shù)在堆上創(chuàng)建 CAsyncSocket 。上面的第一個(gè) Create 調(diào)用使 用默認(rèn)參數(shù)創(chuàng)建流式套接字,第二個(gè) Create 調(diào)用創(chuàng)建具有指定端口和地址的數(shù)據(jù)文報(bào)套接字。任一個(gè) Create 版本都可以和任一種構(gòu)造方法一起使用。 Create 的參數(shù)有: ○ 1 “ 端口 ” :短整型。 對(duì)于服務(wù)器套接字,必須指定端口。對(duì)于客戶(hù)端套接字,通常接受此參數(shù)的默認(rèn)值,該值允許 Windows Sockets 選擇端口。 ○ 2 套接字類(lèi)型: SOCK_STREAM(默認(rèn)值)或 SOCK_DGRAM。 套接字“地址”,如“ ”或“ ”。該地址為網(wǎng)絡(luò)上的網(wǎng)際協(xié)議 (IP) 地址。很可能要始終依賴(lài)此參數(shù)的默認(rèn)值。 如果套接字是客戶(hù)端,則使用 CAsyncSocket::Connect 將此套接字對(duì)象連接到服務(wù)器套接字。 如果套接字是服務(wù)器,則將套接字設(shè)置為開(kāi)始偵聽(tīng) ( 使用 CAsyncSocket::Listen) 來(lái)自客戶(hù)端的連接嘗試。接收到連接請(qǐng)求時(shí),用 CAsyncSocket::Accept 接受該請(qǐng)求。 接受連接后,可以執(zhí)行驗(yàn)證密碼等任務(wù)。 注意 Accept 成員函數(shù)采用對(duì)新的 空 CSocket 對(duì)象的引用作為它的參數(shù)。在調(diào)用 Accept 之前,必須構(gòu)造該對(duì)象。如果此套接字對(duì)象超出范圍,則連接關(guān)閉。不要對(duì)這個(gè)新套接字對(duì)象調(diào)用 Create 。 有關(guān)示例,請(qǐng)參見(jiàn)文章 Windows Sockets: 操作順序。通過(guò)調(diào)用 CAsyncSocket 對(duì)象的封裝 Windows Sockets API 函數(shù)的成員函數(shù),與其他套接字進(jìn)行通信。 如果在堆棧上創(chuàng)建了套接字對(duì)象,當(dāng)包含函數(shù)超出范圍時(shí)將調(diào)用此對(duì)象的析構(gòu)函數(shù)。如果使用 new 運(yùn)算符在堆上創(chuàng)建了套接字對(duì)象,則您必須負(fù)責(zé)使用 delete 運(yùn)算符銷(xiāo)毀此對(duì)象。 析構(gòu)函數(shù)在銷(xiāo)毀對(duì)象之前調(diào)用對(duì)象的 Close 成員函數(shù)。 有關(guān)代碼中該順序的示例(實(shí)際上是對(duì)于 CSocket 對(duì)象) ,請(qǐng)參見(jiàn) Windows Sockets:操作順序 [1], 您對(duì) CAsyncSocket 的責(zé)任。 創(chuàng)建 CAsyncSocket 類(lèi)的對(duì)象后,該對(duì)象封裝 Windows SOCKET 句柄并提供對(duì)此句柄的操作。使用 CAsyncSocket 時(shí),如果您直接使用 API,則必須處理可能面對(duì)的所有問(wèn)題。 第 6 頁(yè) 例如:“阻塞”方案;發(fā)送和接收計(jì)算機(jī)之間的字節(jié)順序差異;在 Unicode 和多字節(jié)字符 集(MBCS)字符串之間轉(zhuǎn)換。 利用 CSocket 進(jìn)行有連接的通信 微軟的 MFC 把復(fù)雜的 WinSock API 函數(shù)封裝到類(lèi)里,這使得編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序更容易。CAsyncSocket 類(lèi)逐個(gè)封裝了 WinSock API,為高級(jí)網(wǎng)絡(luò)程序員 提供了更加有力而靈活的方法。這個(gè)類(lèi)基于程序員了解網(wǎng)絡(luò)通訊的假設(shè),目的是為了在 MFC 中使用 WinSock,程序員有責(zé)任處理諸如阻塞、字節(jié)順序和在 Unicode 與 MBCS 間轉(zhuǎn)換字符的任務(wù)。為了給程序員提供更方便的接口以自動(dòng)處理這些任務(wù), MFC 給出 了 CSocket 類(lèi),這個(gè) 類(lèi)是由CAsyncSocket 類(lèi)繼承下來(lái)的,它提供了比 CAsyncSocket 更高層的 WinSock API 接口。Csocket 類(lèi)和 CsocketFile 類(lèi)可以與 Carchive 類(lèi)一起合作來(lái)管理發(fā)送和接收的數(shù)據(jù),這使管理數(shù)據(jù)收發(fā)更加便利。 CSocket 對(duì)象提供阻塞模式,這對(duì)于 Carchive 的同步操作是至關(guān)重要的。阻塞函數(shù)(如 Receive()、 Send()、 ReceiveFrom()、 SendTo() 和 Accept()) 直到操作完成后才返回控制權(quán),因此如果需要低層控制和高效率,就使用 CasyncSock 類(lèi);如果需要方便,則可使用 Csocket 類(lèi)。 使用 CSocket 對(duì)象涉及 CArchive 和 CSocketFile 類(lèi)對(duì)象。以下介紹的針對(duì)字節(jié)流型套接字的操作步驟中,只有第 3 步對(duì)于客戶(hù)方和服務(wù)方操作是不同的,其他步驟都相同。 ( 1) 造一個(gè) CSocket 對(duì)象。 ( 2) 使用這個(gè)對(duì)象的 Create() 成員函數(shù)產(chǎn)生一個(gè) socket 對(duì)象。在客戶(hù)方程序中,除非需要數(shù)據(jù)報(bào)套接字, Create() 函數(shù)一般情況下應(yīng)該使用默認(rèn)參數(shù)。而對(duì)于服務(wù)方程序,必須在調(diào)用 Create 時(shí)指定一個(gè)端口。需要注意的是, Carchive 類(lèi)對(duì)象不能與數(shù)據(jù)報(bào) ( UDP)套接字一起工作,因此對(duì)于數(shù)據(jù)報(bào)套 接字, CAsyncSocket 和 CSocket 的使用方法是一樣的。 ( 3) 如果是客戶(hù)方套接字,則調(diào)用 CAsyncSocket ∷ Connect() 函數(shù)與服務(wù)方套接字連接;如果是服務(wù)方套接字,則調(diào)用 CAsyncSocket∷ Listen() 開(kāi)始監(jiān)聽(tīng)來(lái)自客戶(hù)方的連接請(qǐng)求,收到連接請(qǐng)求后,調(diào)用 CAsyncSocket∷ Accept() 函數(shù)接受請(qǐng)求,建立連接。請(qǐng)注意 Accept() 成員函數(shù)需要一個(gè)新的并且為空的 CSocket 對(duì)象作為它的參數(shù),解釋同上。 ( 4) 產(chǎn)生一個(gè) CSocketFile 對(duì)象,并把它與 CSocket 對(duì)象關(guān)聯(lián)起來(lái)。 ( 5) 為接收和發(fā)送數(shù)據(jù)各產(chǎn)生一個(gè) CArchive 對(duì)象,把它們與 CSocketFile 對(duì)象關(guān)聯(lián)起來(lái)。切記 CArchive 是不能和數(shù)據(jù)報(bào)套接字一起工作的。 ( 6) 使用 CArchive 對(duì)象的 Read( )和 Write() 等函數(shù)在客戶(hù)與服務(wù)方傳送數(shù)據(jù)。 ( 7) 通訊完畢后,銷(xiāo)毀 CArchive、 CSocketFile 和 CSocket 對(duì)象。 3 詳細(xì)設(shè)計(jì) 我們利用 WinSocket 實(shí)現(xiàn)一個(gè) 網(wǎng)絡(luò)聊天室。需要一個(gè)聊天服務(wù)器,它可以和很多客戶(hù)端進(jìn)行通信,從而把來(lái)自不同的客戶(hù)的聊天信息轉(zhuǎn)交到所有其他的客戶(hù)端。這樣就形成了一個(gè)采用 Client/Server 結(jié)構(gòu)的并可以多人同時(shí)在線(xiàn)的聊天室。 客戶(hù)端的實(shí)現(xiàn) ( 1)首先啟動(dòng) Visual C++ ,利用 MFC AppWizard[EXE]建立一個(gè)新的 MFC 工程 ,工程名為 tcpclient,在 MFC AppWizard Step1 的時(shí)候選擇 Dialog based 即基于對(duì)話(huà)框,在 Step4時(shí)勾選 Windows Sockets 選項(xiàng) (如圖 3) ,其他 默認(rèn)值下一步。 第 7 頁(yè) 圖 3 MFC的設(shè)置 ( 2) 客戶(hù)端主要分為三個(gè)窗口,第一個(gè)是連接窗口,需要輸入連接到服務(wù)器的相關(guān)設(shè)置信息;第二個(gè)是聊天信息顯示窗口,該窗口顯示登錄服務(wù)器以來(lái)發(fā)送和接收到的消息;第三個(gè)是消息編輯發(fā)送窗口,需要輸入你要發(fā)送的信息內(nèi)容并發(fā)送。 新建一個(gè)對(duì)話(huà)框,并添加各種控件(見(jiàn)控件表 1)如圖 4: 圖 4 聊天窗口布局 第 8 頁(yè) 表 1 控件類(lèi)型及各自 ID 標(biāo)題 控件類(lèi)型 控件 ID 連接 Static IDC_STATIC 信息區(qū) Static IDC_STATIC 我的 ID: Static IDC_STATIC 服務(wù)器 ID: Static IDC_STATIC 端口號(hào)(默認(rèn) 520) Static IDC_STATIC 連接服務(wù)器 Button IDC_con 發(fā)送(回車(chē)) Button IDC_send 編輯框 1 Edit IDC_EDIT1 編輯框 2 Edit IDC_EDIT2 編輯框
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1