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

正文內(nèi)容

基于mfc的局域網(wǎng)聊天工具(參考版)

2024-11-12 06:08本頁面
  

【正文】 ④ 發(fā)送數(shù)據(jù) int sendto ( SOCKET s, //一個(gè)可用的 SOCKET const char FAR *buf, //需 要傳輸?shù)臄?shù)據(jù) int len, //傳輸數(shù)據(jù)的長度 int flags, //標(biāo)記 const struct sockaddr FAR *to, //指向存有目的 ip 和端口的結(jié)構(gòu)體 int tolen //目的地址的長度 )。 bind(sockSrv,(SOCKADDR*)amp。 =AF_INET。 例子: 26 sockaddr_in addrSrv。 } S_un。 } S_un_w。 } S_un_b。 //Padding to make structure the same size as //SOCKADDR. }。 //Inter Protocol (IP) port. IN_ADDR sin_addr。 //Address family。 }。 sockaddr 結(jié)構(gòu)體: struct sockaddr { u_short sa_family。 例子: SOCKET sockSrv=socket (AF_INET,SOCK_DGRAM,0)。 Windows Sockets 2 中引入了許多其它的類型,在 中都有所定義。 } ② 創(chuàng) 建套接字 SOCKET socket( int af, int type, int protocol )。 } /*確認(rèn)加載的 WinSock DLL 是否為 版本,請(qǐng)求的版本信息存儲(chǔ)在變量wsaData 中 */ if ( LOBYTE( ) != 2 ||HIBYTE( ) != 2 ) { WSACleanup( )。wsaData )。 wVersionRequested = MAKEWORD( 2, 2 )。 WSADATA wsaData。 lpWSAData [out]指向 WSADATA 結(jié)構(gòu)體的指針,用于接收 Winsock 執(zhí)行的細(xì)節(jié)。高位字節(jié)指定所需 要的 Winsock庫的副版本,而低位字節(jié)則是主版本。 返回值 如果 WSAStartup 功能函數(shù)執(zhí)行成功,則返回 0;如果不成功則返回一個(gè)error_code(如下表所示), 這個(gè)應(yīng)用并不像平常那樣使用 WSAGetLastError 來獲取 error_code,在執(zhí)行函數(shù)后,會(huì)自動(dòng)返回一個(gè) int 型值。加載 Winsock庫是通過調(diào)用 WSAStartup函數(shù)實(shí)現(xiàn)的。 ① Winsock 的初始化 每個(gè) Winsock 應(yīng)用都必須加載 Winsock DLL 的相應(yīng)版本。 最后 在使用完 Winscock DLL 需要調(diào)用 WSACleanup,將資源釋放。再把這個(gè)套接字和準(zhǔn)備接收數(shù)據(jù)的接口綁定在一起。 對(duì)于在 一個(gè)無連接套接字上接收數(shù)據(jù)的進(jìn)程來說,步驟并不復(fù)雜。 它是同步運(yùn)行的。使用帶存檔的套接字與使用 MFC 的文件序列化協(xié)議非常相似。除了將 套接字打包為面向?qū)ο蟮男问揭杂糜? C++ 外,此類提供的唯一附加抽象化是將某些與套接字相關(guān)的 Windows 消息轉(zhuǎn)換為回調(diào)。 CAsyncSocket 該類封裝 Windows Sockets API??蓪?shù)據(jù)文報(bào)消息發(fā)送到指定的套接字,然后從指定的套接字接收消息。 可用的套接字類型有以下兩種:流式套接字 , 提供沒有記錄邊界的數(shù)據(jù)流,即字節(jié)流 ; 數(shù)據(jù)文報(bào)套接字 , 支持面向記錄的數(shù)據(jù)流,但不能確保能被送達(dá),也無法確保按照發(fā)送順序或不重復(fù) , 可靠性在局域網(wǎng) ( LAN) 上往往很 好,但在廣域網(wǎng) ( WAN) 上卻不太好。套接字具有類型,與正在運(yùn)行的進(jìn)程相關(guān)聯(lián),并且可以有名稱。 因?yàn)樘捉幼质褂镁W(wǎng)際協(xié)議組,所以 它們對(duì)于支持 “信息高速公路 ”上 Inter 通信的應(yīng)用程序是首選方式。 許多網(wǎng)絡(luò)軟件供應(yīng)商支持網(wǎng)絡(luò)協(xié)議下的 Windows Sockets,這些協(xié)議包括:傳輸控制協(xié)議 /網(wǎng)際協(xié)議 (TCP/IP)和 Novell Corporation 的互聯(lián)網(wǎng)包交換協(xié)議 /順序分組報(bào)文交換協(xié)議 (IPX/SPX) 等。 WINDOWS SOCKETS 網(wǎng)絡(luò)編程接口概述 ( 1) WINDOWS SOCKETS 簡介 Windows Sockets:用于 Microsoft Windows 環(huán)境下的網(wǎng)絡(luò)計(jì)算的開放接口 。 UDP 的典型性應(yīng)用是如流媒體(音頻和視頻等)這樣按時(shí)到達(dá)比可靠性更重要的應(yīng)用,或者如 DNS 查找這樣的簡單查詢 /響應(yīng)應(yīng)用,如果 需要 建立可靠的連結(jié) ,哪么 所作的額外工作將是不成比例地大。 UDP( IP 協(xié)議號(hào) 17)是一個(gè) 無連結(jié)的 數(shù)據(jù)報(bào)協(xié)議。 IP 數(shù)據(jù)包是不可靠的,因?yàn)?IP 并沒有做任何事情來確認(rèn)數(shù)據(jù)包是按 順序發(fā)送的或者沒有被破壞。 ( 3) 本論文涉及到的協(xié)議 : IP、 UDP IP( Inter Protocol) 是 TCP/IP 的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議。數(shù)據(jù)通過這樣的分層結(jié)構(gòu)從上層傳到底層,然后通過網(wǎng)線把數(shù)據(jù)傳送出去 。 ( 2)邏輯結(jié)構(gòu): 這是 TCP/IP 協(xié)議的分層結(jié)構(gòu)在互連網(wǎng)計(jì)算機(jī)上的表示,用互連網(wǎng)技術(shù)互相通信的每臺(tái)計(jì)算機(jī) 都 有這樣的分層結(jié)構(gòu)。 應(yīng)用的示例: tel(遠(yuǎn)程登錄 )、 ftp(文件傳遞協(xié)議 )、 等。 TCP/IP 協(xié)議及 WINDOWS SOCKETS 網(wǎng)絡(luò)編程接口 TCP/IP 協(xié)議簡介 ( 1) TCP/IP 協(xié)議 通常 包含了一系列 與“ TCP(傳輸控制協(xié)議) ”和“ IP(網(wǎng)際協(xié)議) ”有聯(lián)系的 網(wǎng)絡(luò)協(xié)議 ,它包括其它的協(xié)議,應(yīng)用軟件,甚至網(wǎng)絡(luò)媒介 。 ( 10) 調(diào)試和異常類 這些類提供對(duì)調(diào)試動(dòng)態(tài)內(nèi)存分配的支持并且支持將異常信息從異常被產(chǎn)生的函數(shù)傳遞給捕獲異常的函數(shù)。使用 ActiveX,可以做到:創(chuàng)建復(fù)合文檔,它允許創(chuàng)建和編輯包括多個(gè)應(yīng)用創(chuàng)建的數(shù)據(jù)的文檔,包括文本、圖形、電子表、聲音或其它數(shù)據(jù)類型 ; 創(chuàng)建能夠嵌入復(fù)合文檔中的 OLE 對(duì)象 ; 使用 OLE 拖放在應(yīng) 用之間拷貝數(shù)據(jù) ; 使用自動(dòng)功能通過一個(gè)程序來控制另一個(gè)程序 ; 創(chuàng)建ActiveX 控件和 ActiveX 控件包容器(以前分別叫作 OLE 控件和 OLE 控件包容器)。 支持連接的類的分類: ISAPI 類 、 Windows 套接字類 、 Win32 Inter 類 。 ( 8) Inter 和網(wǎng)絡(luò)類 這些類允許和其它使用 ISAPI 的計(jì)算機(jī)或一個(gè) Windows Socket 交換信 息。還有用于操作標(biāo)準(zhǔn)文件、 Active 流和 HTML 流的類的集合。有兩個(gè)數(shù)據(jù)庫類的集合── DAO 和 ODBC──它們提供了相似的功能。它可以把 Windows 消息映射給那個(gè)消息的處理函數(shù)的指針。映射經(jīng)常使用其它數(shù)據(jù)結(jié)構(gòu)作為輔助索引。因?yàn)橛成涫褂没炀帲?hash)表來進(jìn)行關(guān)鍵字查找,所以映射查找是非??? 20 的。舉例來說,映射可以是一個(gè)字符串,數(shù)據(jù)可以是一個(gè)指向列表的指針。但是,查找一個(gè)列表的花費(fèi)很大,因?yàn)樗械牟檎叶夹枰獜牧斜淼膬啥酥婚_始查找。列表中的每個(gè)元素都包括一個(gè)指向前驅(qū)和 一個(gè)指向后繼的指針,構(gòu)成了一個(gè)雙向鏈表。必要時(shí),數(shù)組可擴(kuò)展和收縮。但是,如果需要在數(shù)組中插入一個(gè)元素時(shí),所帶來的花費(fèi)是非常大的。數(shù)組是一維數(shù)據(jù)結(jié)構(gòu),它們?cè)趦?nèi)存中是連續(xù)存儲(chǔ)的。無論怎樣,它們?cè)谟糜趯?shí)現(xiàn)那些定義應(yīng)用框架文檔類的數(shù)據(jù)結(jié)構(gòu)是最有幫助的。這些類可用在任何一個(gè)程序中。 ( 6) 數(shù)組、列表和映射類 為了處理數(shù)據(jù)聚集,類庫提供了一組收集類──數(shù)組、列表和“映射”,它們可以處理不同種的對(duì)象和預(yù)定義類型。 CString 提供了非常靈活的動(dòng)態(tài)字符串。因?yàn)樵诼?lián)機(jī)文檔 Win32 SDK 中, CPoint, CSize 和 CRect 各自對(duì)應(yīng)于 POINT, SIZE 和 RECT 結(jié)構(gòu),所以無論在哪里使用這些 C 語言結(jié)構(gòu)時(shí)都可以使用這些 C++類的對(duì)象。 ( 5) 簡單的數(shù)據(jù)類型類 封裝了繪圖坐標(biāo)、字符串、時(shí)間和數(shù)據(jù)信息,這使得 C++語法的使用更加便捷了。這叫作一個(gè)設(shè)備上下文(或 DC)。另外, MFC 提供了一些新控件,包括帶位圖和控制條的按鈕。可以從 CDialog 派生自己的對(duì)話類,或者使用一種通用對(duì)話類作為標(biāo)準(zhǔn)對(duì)話框,如打開或存儲(chǔ)文件、打印、選擇一種字體或 19 顏色、初始化查找并替換操作、執(zhí)行各種 OLE 相關(guān)的操作等。 CDialog 和它的 派生類封裝了對(duì)話框功能。 CWnd 是 所有窗口的基類。 CWnd可被自己使用,也可以作為派生新類的基類。 文檔 /視圖應(yīng)用還包含有框架窗口(派生自 CFrameWnd)和文檔模板(派生自 CDocTemplate)。每一個(gè)視圖都是附加給一個(gè)文檔的窗口并且與一個(gè)框架窗口相關(guān)聯(lián)。它們可以與一個(gè)數(shù)據(jù)文件聯(lián)系。 多個(gè)派生自 CDocument 的文檔類對(duì)象。所有的MFC 應(yīng)用都至少有兩個(gè)對(duì)象:一個(gè)由 CWinApp 派生出的應(yīng)用對(duì)象和一些派生自 CWnd 的主窗口對(duì)象(大多數(shù)情況下,主窗口派生自 Cframe Wnd, CMDIFrame 或 CDialog,所有這些又都派生自 CWnd)使用文檔 /視圖結(jié)構(gòu)的應(yīng)用包含附加對(duì)象。 MFC 的 OLE 包含器和服務(wù)器支持基于文檔 /視圖結(jié)構(gòu)。一個(gè)文檔模板對(duì)象將類與每一個(gè)文檔 /視圖 /框架集聯(lián)系起來。其它的應(yīng)用類型,例如基于對(duì)話的應(yīng)用、基于窗體的應(yīng)用和 DLL 只使用了一些文檔 /視圖框架功能。 AppWizard 產(chǎn)生幾種類型的應(yīng)用,所有這些都以不同的方式使用應(yīng)用框架??梢栽诳蚣苤刑顚憣?duì)于應(yīng)用特定的功能。 ( 2) MFC 應(yīng)用結(jié)構(gòu)類 MFC 應(yīng)用構(gòu)造類有助于一個(gè)框架應(yīng)用的構(gòu)造。事實(shí)上,你可能只需要使用其中的十多個(gè)不同 的 類 , 就可以建立一個(gè)非常漂亮的程序。 MFC 是很龐大的。 MFC 類庫 MFC 類庫 是一個(gè)很大的、擴(kuò)展了的 C++類層次結(jié)構(gòu),與傳統(tǒng)上使用 C 語言直接訪問 Windows API 相反 , MFC 已經(jīng)包含和壓縮了所有標(biāo)準(zhǔn)的“樣板文件”代碼,這些代碼是所有用 C 編寫的 Windows 程序所必需的 , 因此用 MFC 編寫的程序要比用 C 語言編寫的程序小得多, 當(dāng)然 MFC 所編寫的程序的性能也毫無損失。開發(fā)者有時(shí)必須直接調(diào)用一些 Windows 函數(shù),例如, SetCursor 和GetSystemMetrics。而且,可以將直接調(diào)用 Windows API 與調(diào)用類庫自由地混合起來使用。 MFC 在整個(gè) Windows 家族中都是兼容的。 同時(shí),在 Visual C++內(nèi)部也內(nèi)建了很多對(duì) MFC 的 非常實(shí)用的東西, 例如類向?qū)н@樣的支持 , 減少軟件開發(fā)的時(shí)間,使用類向?qū)Э梢陨蓮?hello world 這樣的簡單程序到活動(dòng)文檔服務(wù)器這樣的復(fù)雜程序。 現(xiàn)在 MFC 已經(jīng)成為了 Windows 環(huán)境上標(biāo)準(zhǔn)的 C++ API。 )。 WPARAM wParam, //消息信息的附加信息。 LRESULT CALLBACK WindowProc ( HWND hwnd, //窗口的句柄。 十二、 WindowProc 窗口函數(shù) 窗口中的生命樞紐:窗口函數(shù) WindowProc。 十一、 WinMain 函數(shù)返回值 return 。 其函數(shù)原 型為: LRESULT DispatchMessage( const MSG *lpmsg //指向 MSG 結(jié)構(gòu)體的指針。 )。 16 九、 轉(zhuǎn)換消息 將特定的消息轉(zhuǎn)換為不同的消息 ,例如消息隊(duì)列中同時(shí)有 WM_KEYDOWN和 WM_KEYUP 消息時(shí) ,意味著用戶同時(shí)按下了鍵 盤上的某幾個(gè)鍵 ,此時(shí)TranslateMessage 將其轉(zhuǎn)換為一個(gè) WM_CHAR 消息 。 ( 3) HWND hWnd 指定接收屬于哪個(gè)窗口的消息,通常設(shè)為 NULL,用于接收屬于調(diào)用線程的所有的窗口消息。 ( 1) 返回值 如果獲取的消息為 WM_QUIT,則返回值為 0;如果為其它,則返回值為非0;如果出現(xiàn)錯(cuò)誤,則返回 1。 } 八、獲取消息 GetMessage 功能函數(shù)從 消息隊(duì)列中獲取消息,如果消息隊(duì)列中沒有消息,此功能函數(shù)則會(huì)一直等得消息。msg… )) { TranslateMessage(… )。 七、消息循環(huán) 初始化工作完成后, WinMain 進(jìn)入所謂的消息循環(huán) ,使用 while 循環(huán),不斷的 GetMessage,再使用 TranslateMessage 將消息轉(zhuǎn)化, 用 DispatchMessage 將消息傳遞給窗口函數(shù)去處理。 六、刷新窗口 調(diào) 用 UpdateWindow 函數(shù)來刷新窗口,其函數(shù)原型為: BOOL UpdateWindow( HWND hWnd // 需要刷新的窗口的句柄。 ( 2) HWND hWnd 需要刷新的窗口句柄。 五、顯示窗口 創(chuàng)建窗口后需要使用 ShowWindow 用于顯示窗口,其函數(shù)原型為: BOOL ShowWindow( HWND hWnd, int nCmdShow )。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1