第6章 網絡編程(VC)_第1頁
第6章 網絡編程(VC)_第2頁
第6章 網絡編程(VC)_第3頁
第6章 網絡編程(VC)_第4頁
第6章 網絡編程(VC)_第5頁
已閱讀5頁,還剩58頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第6章 網絡編程(VC)重慶三峽學院重慶三峽學院數學與計算機科學學院數學與計算機科學學院2022-5-12本章主要內容n1、套接字編程原理、套接字編程原理n2、基本的、基本的Windows Sockets API編程編程n3、MFC下的下的Socket編程的類編程的類 n4、一個使用、一個使用CSocket類的網絡通信實例類的網絡通信實例 2022-5-131套接字編程原理套接字編程原理n一個完整的網絡通信進程需要由兩個進一個完整的網絡通信進程需要由兩個進程組成,并且只能用同一種高層協議。程組成,并且只能用同一種高層協議。n也就是說,不可能通信的一端用也就是說,不可能通信的一端用TCP,而另一

2、端用而另一端用UDP。n一個完整的網絡通信需要一個五元組來一個完整的網絡通信需要一個五元組來標識:協議、本地地址、本地端口號、標識:協議、本地地址、本地端口號、遠端地址、遠端端口號。遠端地址、遠端端口號。 2022-5-141.1 Client/server通信模型通信模型 n在客戶在客戶/服務器模式中我們將請求服務的服務器模式中我們將請求服務的一方稱為客戶端(一方稱為客戶端(client),將提供某種),將提供某種服務的一方稱為服務器(服務的一方稱為服務器(server)。)。n一個服務程序通常在一個眾所周知的地一個服務程序通常在一個眾所周知的地址監聽對服務的請求,也就是說服務進址監聽對服務

3、的請求,也就是說服務進程一直處于休眠狀態,直到一個客戶端程一直處于休眠狀態,直到一個客戶端對這個服務的地址提出了連接請求。對這個服務的地址提出了連接請求。2022-5-15n在這個時刻,服務程序被在這個時刻,服務程序被“驚醒驚醒”并且并且為客戶端提供服務為客戶端提供服務對客戶端的請求作對客戶端的請求作出適當的反應。出適當的反應。n雖然基于連接的服務是設計客戶端雖然基于連接的服務是設計客戶端/服務服務器應用程序的標準,但有些服務也是可器應用程序的標準,但有些服務也是可以通過無連接的接口提供的。以通過無連接的接口提供的。2022-5-16客戶端/服務器的請求/響應過程示意圖如下所示。 圖1 客戶/

4、服務器通信模型 2022-5-17n通過上面的分析,我們不難理解一個一通過上面的分析,我們不難理解一個一個完整的網絡應用程序包括客戶端和服個完整的網絡應用程序包括客戶端和服務器兩個部分。務器兩個部分。n客戶端與服務器進程的作用是非對稱的,客戶端與服務器進程的作用是非對稱的,因此編碼不同。因此編碼不同。n服務進程一般是等待客戶端請求而啟動服務進程一般是等待客戶端請求而啟動的,只要系統運行,該服務進程一直存的,只要系統運行,該服務進程一直存在,直到終止或強迫終止。在,直到終止或強迫終止。 2022-5-181.2 Windows Sockets規范 nWindows Sockets 規范是規范是9

5、0年代初年代初Microsoft公公司聯合其他幾家大公司共同制定的一套在司聯合其他幾家大公司共同制定的一套在Windows下的二進制兼容網絡編程接口規范。下的二進制兼容網絡編程接口規范。n它以它以U.C.Berkeley大學大學BSD UNIX中流行的中流行的Socket接口為基礎,主要在其上擴充了一組針接口為基礎,主要在其上擴充了一組針對對Windows的擴展庫函數,增加了符合的擴展庫函數,增加了符合Windows消息驅動特性的網絡事件異步選擇機消息驅動特性的網絡事件異步選擇機制,以使程序員能夠充分利用制,以使程序員能夠充分利用Windows消息驅消息驅動機制進行編程。動機制進行編程。 20

6、22-5-19nWindows Sockets 的用途是將基礎網絡抽的用途是將基礎網絡抽象出來,這樣,您不必對網絡非常了解,象出來,這樣,您不必對網絡非常了解,并且您的應用程序可在任何支持套接字并且您的應用程序可在任何支持套接字的網絡上運行。的網絡上運行。n它為應用程序開發者定義了一套簡單統它為應用程序開發者定義了一套簡單統一的一的API,并讓各家網絡軟件供應商共同,并讓各家網絡軟件供應商共同遵守。遵守。 2022-5-110nMFC提供了兩個類用以封裝提供了兩個類用以封裝Windows Sockets API。n一個是一個是CAsyncSocket類,它主要是提供給那些類,它主要是提供給那些

7、具有一定網絡編程經驗,希望同時擁有具有一定網絡編程經驗,希望同時擁有Socket API編程的靈活性和類庫編程便利性的開發者。編程的靈活性和類庫編程便利性的開發者。n另一個是另一個是CSocket類,它由類,它由CAsyncSocket類派類派生,它具有更高的抽象化,致力于簡化網絡編生,它具有更高的抽象化,致力于簡化網絡編程所需的操作。程所需的操作。 2022-5-1111.3 套接字套接字(Socket)1.3.1 套接字定義套接字定義 n套接字,是支持套接字,是支持TCP/IP的網絡通信的基的網絡通信的基本操作單元,可以看做是不同主機之間的本操作單元,可以看做是不同主機之間的進程進行雙向通

8、信的端面點。進程進行雙向通信的端面點。n簡單的說,套接字就是通信兩方的一種約簡單的說,套接字就是通信兩方的一種約定,用套接字中的相關函數來完成通信過定,用套接字中的相關函數來完成通信過程。程。2022-5-112使用套接字的應用程序間通信模型如圖2所示。2022-5-1131.3.2分類分類n可用的套接字類型有以下兩種:可用的套接字類型有以下兩種: n流式套接字流式套接字 n數據報套接字數據報套接字 2022-5-1 流式套接字流式套接字 n流式套接字提供沒有記錄邊界的數據流,流式套接字提供沒有記錄邊界的數據流,即字節流。字節流能確保以正確的順序即字節流。字節流能確保以正確的

9、順序無重復地被送達。無重復地被送達。 2022-5-1152022-5-1 數據報套接字數據報套接字 n數據報套接字支持面向記錄的數據流,數據報套接字支持面向記錄的數據流,但不能確保能被送達,也無法確保按照但不能確保能被送達,也無法確保按照發送順序或不重復。發送順序或不重復。 2022-5-1172022-5-1181.3.3 套接字的作用套接字的作用 n套接字的作用非常大,至少在下面三種套接字的作用非常大,至少在下面三種通信上下文中如此:通信上下文中如此: n客戶端客戶端/服務器模型。服務器模型。 n對等網絡方案,如聊天應用程序。對等網絡方案,如聊天應用程序。 n通過讓接收

10、應用程序將消息解釋為函數調用通過讓接收應用程序將消息解釋為函數調用來進行遠程過程調用來進行遠程過程調用 (RPC)。 2022-5-1191.3.4端口與地址端口與地址 n在網絡上,一個套接字的標識主要借助在網絡上,一個套接字的標識主要借助于地址和端口來描述。于地址和端口來描述。n套接字的地址指該套接字所在計算機的套接字的地址指該套接字所在計算機的網絡地址,可以為域名或網絡地址,可以為域名或IP地址的形式。地址的形式。n通常,創建套接字時不必指明網絡地址,通常,創建套接字時不必指明網絡地址,只有在擁有多個網絡地址的機器時,才只有在擁有多個網絡地址的機器時,才需要顯式指定一個網絡地址。需要顯式指

11、定一個網絡地址。 2022-5-120n同一機器上可以運行多個網絡應用程序,同一機器上可以運行多個網絡應用程序,每個應用程序都有自己的套接字用以進每個應用程序都有自己的套接字用以進行網絡通信,此時如果只有地址標識套行網絡通信,此時如果只有地址標識套接字,則當一個通信包到達機器時,將接字,則當一個通信包到達機器時,將無法確定究竟是哪個應用程序的套接字無法確定究竟是哪個應用程序的套接字需要接收此信息。需要接收此信息。n由此增加了端口的概念,以協助區分同由此增加了端口的概念,以協助區分同一機器上不同應用程序的套接字。一機器上不同應用程序的套接字。 2022-5-121n端口用于標識進程,同一機器上不

12、同的網絡應端口用于標識進程,同一機器上不同的網絡應用程序各有不同的端口,這樣,通過用程序各有不同的端口,這樣,通過“網絡地網絡地址址+端口號端口號”的標識方法,便唯一標識了機器的標識方法,便唯一標識了機器上的應用程序了。上的應用程序了。n某些端口是專門為公共服務保留的某些端口是專門為公共服務保留的(ftp:21,http:80),除非程序是要提供這些服),除非程序是要提供這些服務,否則應盡量避免使用這些端口。務,否則應盡量避免使用這些端口。n一般來說,端口一般來說,端口1024以前的端口號都是系統保以前的端口號都是系統保留的或是作為公共服務的,應盡量選擇大于留的或是作為公共服務的,應盡量選擇大

13、于1024的端口號,以避免沖突。的端口號,以避免沖突。 2022-5-1222、基本的基本的Windows Sockets API編程編程 n需要在程序中添加下面的包含語句:需要在程序中添加下面的包含語句:#includen使用使用VC+編譯時需添加編譯鏈接依賴項編譯時需添加編譯鏈接依賴項ws2_32.lib庫庫n協議尋址協議尋址2022-5-1233、MFC下的下的Socket編程的類編程的類nMFC提供了兩個類來支持套接字編程,提供了兩個類來支持套接字編程,它們是它們是CAsyncSocket類和類和CSocket類。類。 2022-5-1243.1 CAsyncSocket類類 nCAs

14、yncSocket類一對一地封裝類一對一地封裝Windows Socket API。nCAsyncSocket類適合那些對網絡通信細節很了類適合那些對網絡通信細節很了解,且希望利用回調的便利通知網絡事件的程解,且希望利用回調的便利通知網絡事件的程序員使用。序員使用。n如果想利用如果想利用Windows Sockets方便地處理方便地處理MFC應用程序中的多個網絡協議,而又不想放棄靈應用程序中的多個網絡協議,而又不想放棄靈活性,可以考慮使用活性,可以考慮使用CAsyncSocket。2022-5-125nCAsyncSocket類是類是MFC在方便性與靈活在方便性與靈活性中的一種折衷方案。性中的

15、一種折衷方案。nMFC提供了一個類用以保留網絡編程的提供了一個類用以保留網絡編程的靈活性,而方便性則由下面要講到的靈活性,而方便性則由下面要講到的CSocket類來提供。類來提供。2022-5-1263.2 CSocket類類nCSocket類是類是CAsyncSocket類的派生類,類的派生類,它致力于提供比它致力于提供比CAsyncSocket類更高的類更高的抽象性,使得網絡編程變得簡單方便。抽象性,使得網絡編程變得簡單方便。nCSocket類支持流方式和數據報方式,但類支持流方式和數據報方式,但一般情況下用的更多的是流方式的數據一般情況下用的更多的是流方式的數據通信。通信。 2022-5

16、-127n在流方式的通信模式下,在流方式的通信模式下,CSocket類通常會與類通常會與CArchive類結合,以串行化的方式發送和接收類結合,以串行化的方式發送和接收數據,這使得網絡編程變得像讀寫文件一樣簡數據,這使得網絡編程變得像讀寫文件一樣簡單了。單了。nCArchive類扮演的是一個數據緩沖區的角色,類扮演的是一個數據緩沖區的角色,它通過它通過CSocketFile類與一個套接字相聯系。類與一個套接字相聯系。n只要建立了兩者的聯系,然后往只要建立了兩者的聯系,然后往“數據緩沖區數據緩沖區”裝入數據與取出數據就完成了。裝入數據與取出數據就完成了。 2022-5-128發送數據與接收數據的

17、示意圖如圖5所示。 2022-5-129n由圖由圖5可以看出只要建立好套接字跟可以看出只要建立好套接字跟CArchive類對象的關聯,則發送和接收類對象的關聯,則發送和接收數據時,只需要對數據時,只需要對CArchive對象進行操對象進行操作,從而可以利用此類對象優良的串行作,從而可以利用此類對象優良的串行化功能,十分方便地實現發送和接收數化功能,十分方便地實現發送和接收數據。據。 2022-5-1304、一個使用、一個使用CSocket類的網類的網絡通信實例絡通信實例 n本例采用本例采用CSocket編程模型建立一個聊天編程模型建立一個聊天程序的簡單實例。程序的簡單實例。n建立項目時注意選上

18、建立項目時注意選上“Windows套接字套接字”復選框。復選框。 2022-5-1314.1 服務器端應用程序設計服務器端應用程序設計(ServerDemo) 1)界面)界面 2022-5-132控件類型控件類型控件控件IDCaption屬性屬性控件變量控件變量變量類型變量類型列表框IDC_Log無m_LogCtrlCListBox編輯框IDC_Message無m_MsgCtrlCEdit按鈕IDC_Send發送M_SendCtrlCButton靜態控件IDC_STATIC記錄無無靜態控件IDC_STATIC待發消息無無各控件屬性如下各控件屬性如下 列表框控件列表框控件IDC_Log屬性屬性“

19、sort”值為值為false,屬性屬性“Horizontal Scroll”值為值為true。按鈕按鈕IDC_Send屬性屬性Disable值為值為true。 2022-5-1332)定義CSocket類的派生類CServSocket和CRecvSocket。 n從從CSocket編程模型知道,服務器端需要編程模型知道,服務器端需要兩種套接字,一個用來偵聽連接請求,兩種套接字,一個用來偵聽連接請求,一個用來與請求連接的套接字建立連接。一個用來與請求連接的套接字建立連接。n因此,為程序添加兩個因此,為程序添加兩個CSocket派生類:派生類:SServSocket和和CRecvSocket,它們

20、與對,它們與對話框類密切配合,共同完成程序所要求話框類密切配合,共同完成程序所要求實現的功能。實現的功能。 2022-5-1343)建立套接字與對話框類的關聯 n在程序中,對話框類要用到套接字類,在程序中,對話框類要用到套接字類,而套接字類在響應某些消息,如在函數而套接字類在響應某些消息,如在函數OnAccept、OnReceive中進行處理時,中進行處理時,也要改變對話框的某些控件狀態,以反也要改變對話框的某些控件狀態,以反映給用戶這些事情的發生。映給用戶這些事情的發生。 2022-5-135n這里存在著兩個類相互使用的情況,把套接字這里存在著兩個類相互使用的情況,把套接字類對象定義成對話框

21、類的成員變量,同時在套類對象定義成對話框類的成員變量,同時在套接字類中也把對話框類定義為成員變量。接字類中也把對話框類定義為成員變量。n如何實現這樣的用法呢?如何實現這樣的用法呢?n在對話框類頭文件中加入套接字頭文件的聲明,在對話框類頭文件中加入套接字頭文件的聲明,然后在套接字類頭文件中加入對話框類頭文件然后在套接字類頭文件中加入對話框類頭文件的聲明,這樣的做法顯然行不通。的聲明,這樣的做法顯然行不通。 2022-5-136具體做法應該如下: n首先,在首先,在ServerDemoDlg.h中加入套接字中加入套接字類頭文件的聲明,語句類頭文件的聲明,語句#pragma once的的后面加入如下

22、語句:后面加入如下語句:#include ServSocket.h#include RecvSocket.h 2022-5-137n然后在該文件中為然后在該文件中為CServerDemoDlg類增類增加兩個公有成員變量,語句如下:加兩個公有成員變量,語句如下:CServSocket *ServSock;CRecvSocket *RecvSock;n這樣在對話框類中就可以使用套接字類這樣在對話框類中就可以使用套接字類了。了。 2022-5-138n繼續在套接字類中加入對話框類信息。繼續在套接字類中加入對話框類信息。n首先,在首先,在ServSocket.h文件的開頭,語句文件的開頭,語句#pra

23、gma once的后面加入如下語句:的后面加入如下語句:class CServerDemoDlg; 2022-5-139n然后,在該文件中為然后,在該文件中為CServSocket類添加類添加一個公有成員變量和一個構造函數:一個公有成員變量和一個構造函數:CServSocket(CServerDemoDlg *Dlg);CServerDemoDlg *m_Dlg; 2022-5-140n接著在接著在ServSocket.cpp文件中添加新的構造函文件中添加新的構造函數的實現,并添加一條關于數的實現,并添加一條關于ServerDemoDlg.h文件的預編譯聲明,代碼如下:文件的預編譯聲明,代碼如

24、下:#include “ServerDemoDlg.h”CServSocket:CServSocket(CServerDemoDlg *Dlg)m_Dlg=Dlg;2022-5-141n這樣,在套接字類中也可以通過成員變這樣,在套接字類中也可以通過成員變量使用對話框了。量使用對話框了。n使用同樣的方法對使用同樣的方法對CRecvSocket類進行設類進行設置,使其也可以通過成員變量使用對話置,使其也可以通過成員變量使用對話框。框。 2022-5-1424)為套接字添加串行化讀寫信息的功能。 n在服務器端的兩個套接字中,只有在服務器端的兩個套接字中,只有CRecvSocket套接字是真正與客戶端

25、套接套接字是真正與客戶端套接字建立連接,發送與接收數據的。字建立連接,發送與接收數據的。n因此,我們只為該類添加串行化讀寫信因此,我們只為該類添加串行化讀寫信息功能。息功能。 2022-5-143n在在RecvSocket.h文件中為類文件中為類CRecvSocket添加三個公有成員變量。添加三個公有成員變量。 CSocketFile *m_File;CArchive *m_ArIn;CArchive *m_ArOut; 2022-5-1445)在對話框中初始化套接字并偵聽連接請求。 n在在OnInitDialog函數中添加如下代碼:函數中添加如下代碼: / TODO: / TODO: 在此添

26、加額外的初始化代碼在此添加額外的初始化代碼ifif(ServSock(ServSock= =newnew CServSocket( CServSocket(thisthis) ifif(ServSock(ServSock-Create (9547)-Create (9547) m_LogCtrl.AddStringm_LogCtrl.AddString ( (等待連接等待連接.);.);ServSockServSock-Listen ();-Listen (); elseelse m_LogCtrl.AddStringm_LogCtrl.AddString ( (初始化失敗,請重新啟動程序!初

27、始化失敗,請重新啟動程序!););deletedelete ServSock ServSock; ; elseelse m_LogCtrl.AddStringm_LogCtrl.AddString ( (初始化失敗,請重新啟動程序!初始化失敗,請重新啟動程序!);); n上述代碼主要是創建并初始化上述代碼主要是創建并初始化ServSockServSock套接字,并開始偵聽連接請求。套接字,并開始偵聽連接請求。 2022-5-1456)接受連接請求。 n由于是由于是CServSocket類的類的ServSock對象在對象在偵聽連接請求,因此由該類來接受連接偵聽連接請求,因此由該類來接受連接請求。

28、請求。n首先,在首先,在ServSocket.h文件中加入如下語文件中加入如下語句:句:#include “RecvSocket.h”n然后,重載該類的然后,重載該類的OnAccept函數,在該函數,在該函數中添加如下代碼:函數中添加如下代碼: 2022-5-146 CRecvSocket CRecvSocket * *tempSocktempSock; ;ifif(tempSock(tempSock= =newnew CRecvSocket( CRecvSocket(thisthis-m_Dlg-m_Dlg ) ) ifif(Accept(Accept(* *tempSocktempSock

29、) tempSock-m_FiletempSock-m_File = =newnew CSocketFile(tempSock CSocketFile(tempSock););tempSock-m_ArIntempSock-m_ArIn = =newnew CArchive(tempSock- CArchive(tempSock-m_File ,CArchive:loadm_File ,CArchive:load ); );tempSock-m_ArOuttempSock-m_ArOut = =newnew CArchive(tempSock- CArchive(tempSock-m_File

30、 ,CArchive:storem_File ,CArchive:store ); );m_Dlg-RecvSock =tempSockm_Dlg-RecvSock =tempSock; ;tempSocktempSock=NULL;=NULL;m_Dlg-m_LogCtrl .AddStringm_Dlg-m_LogCtrl .AddString ( (連接成功連接成功, ,可以開始傳遞消息可以開始傳遞消息););m_Dlg-m_SendCtrl.EnableWindowm_Dlg-m_SendCtrl.EnableWindow ( (truetrue);); elseelse m_Dlg-

31、m_LogCtrl .AddStringm_Dlg-m_LogCtrl .AddString ( (客戶端當前的連接嘗試失敗客戶端當前的連接嘗試失敗););deletedelete tempSock tempSock; ; elseelse m_Dlg-m_LogCtrl .AddStringm_Dlg-m_LogCtrl .AddString ( (連接套接字初始化失敗連接套接字初始化失敗);); 2022-5-147n上述代碼首先調用上述代碼首先調用Accept函數接受連接請求,函數接受連接請求,然后為該連接創建一個然后為該連接創建一個CRecvSocket類型的套類型的套接字,并為該套接

32、字關聯接字,并為該套接字關聯CArchive對象,使其對象,使其能實現串行化傳輸信息的功能。能實現串行化傳輸信息的功能。n最后把關聯好的套接字傳回給對話框對象供其最后把關聯好的套接字傳回給對話框對象供其使用。使用。n這樣,對話框對象的成員變量這樣,對話框對象的成員變量RecvSock套接字套接字便與客戶端套接字之間建立了一條信息通道,便與客戶端套接字之間建立了一條信息通道,信息將在兩個套接字之間傳遞。信息將在兩個套接字之間傳遞。 2022-5-1487)接收信息 n連接建立成功后,當有信息到達服務器端時,就會引發連接建立成功后,當有信息到達服務器端時,就會引發RecvSock套接字對象的套接字

33、對象的OnReceive函數,因此需要重載函數,因此需要重載CRecvSocket類的類的OnReceive函數。添加代碼如下:函數。添加代碼如下:CString str;(*m_ArIn)str;m_Dlg-m_LogCtrl .AddString (對方發來的信息如下對方發來的信息如下:); m_Dlg-m_LogCtrl .AddString (str); m_Dlg-m_LogCtrl .SetCurSel (m_Dlg-m_LogCtrl .GetCount() - 1); 2022-5-1498)發送信息n為對話框為對話框“發送發送”按鈕添加事件處理函數按鈕添加事件處理函數OnBn

34、ClickedSend(),代碼如,代碼如下:下:void CServerDemoDlg:OnBnClickedSend()/ TODO: 在此添加控件通知處理程序代碼在此添加控件通知處理程序代碼CString str;m_MsgCtrl.GetWindowText (str);if(str.GetLength ()=0) AfxMessageBox(空信息空信息,所以不發出所以不發出);elsem_LogCtrl.AddString (你發出的信息如下你發出的信息如下:);m_LogCtrl.AddString (str);m_LogCtrl.SetCurSel (m_LogCtrl.Get

35、Count ()-1);*(RecvSock-m_ArOut )m_ArOut -Flush (); 2022-5-1504.2 客戶端應用程序設計客戶端應用程序設計(項目項目名稱名稱ClientDemo) 1)界面)界面 2022-5-151控件類型控件類型控件控件IDCaption屬性屬性控件變量控件變量變量類型變量類型列表框IDC_Log無m_LogCtrlCListBox編輯框IDC_Message無m_MsgCtrlCEdit按鈕IDC_Send發送m_SendCtrlCButton靜態控件IDC_STATIC記錄無無靜態控件IDC_STATIC待發消息無無各控件屬性如下各控件屬性如

36、下 列表框控件列表框控件IDC_Log屬性屬性“sort”值為值為false,屬性屬性“Horizontal Scroll”值值為為true。按鈕按鈕IDC_Send屬性屬性Disable值為值為true。 2022-5-1522)創建套接字類(從CSocket類派生) n客戶端只需要一個套接字,命名為客戶端只需要一個套接字,命名為CClientSocket。 2022-5-1533)建立對話框類與套接字類的關聯。 n首先,在首先,在ClientDemoDlg.h文件的開頭,文件的開頭,語句語句#pragma once后面加入如下語句:后面加入如下語句:#include “ClientSock

37、et.h” 2022-5-154n然后,在該文件中為然后,在該文件中為CClientDemoDlg類類添加一個公有成員變量,語句如下:添加一個公有成員變量,語句如下:CClientSocket *ClientSock;n接著,在接著,在ClientSocket.h文件的開頭,語文件的開頭,語句句#pragma once后面加入如下語句:后面加入如下語句:class CClientDemoDlg; 2022-5-155n然后,在該文件中為然后,在該文件中為CClientSocket類添類添加一公有成員變量和一個構造函數,語加一公有成員變量和一個構造函數,語句如下:句如下:CClientSocke

38、t(CClientDemoDlg *Dlg);CClientDemoDlg *m_Dlg; 2022-5-156n接著,在接著,在ClientSocket.cpp文件中添加新的構造函數的文件中添加新的構造函數的實現代碼,并添加一條關于實現代碼,并添加一條關于CClientDemoDlg.h文件的文件的預編譯聲明,代碼如下:預編譯聲明,代碼如下:#include ClientDemoDlg.hCClientSocket:CClientSocket(CClientDemoDlg *Dlg) m_Dlg=Dlg;n這樣,便完成了對話框和套接字之間的連接了。這樣,便完成了對話框和套接字之間的連接了。

39、2022-5-1574)為套接字添加串行化讀寫信息的功能n在在ClientSocket.h文件中,為類文件中,為類CClientSocket添加三個公有成員變量,添加三個公有成員變量,代碼如下:代碼如下:CSocketFile *m_File;CArchive *m_ArIn;CArchive *m_ArOut;2022-5-1585)在對話框中初始化套接字并建立連接 n在對話框類的在對話框類的OnInitDialog函數中添加如函數中添加如下代碼下代碼 2022-5-159/ TODO: 在此添加額外的初始化代碼在此添加額外的初始化代碼m_LogCtrl.AddString (正在連接正在連接.);if(ClientSock=new CClientSocket(thi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論