版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、網(wǎng)絡(luò)編程入門授課教師:網(wǎng)絡(luò)編程導(dǎo)入計(jì)算機(jī)和網(wǎng)絡(luò)通信的出現(xiàn)給人們的生活帶來(lái)了革命性的變化計(jì)算機(jī)的硬件離不開軟件,通信軟件使計(jì)算機(jī)網(wǎng)絡(luò)硬件的具體功能得以實(shí)現(xiàn)Microsoft Visual C+是由微軟開發(fā)的可視化軟件開發(fā)平臺(tái),具有強(qiáng)大面向?qū)ο蠊δ?,可以開發(fā)開發(fā)網(wǎng)絡(luò)通信軟件 本章要點(diǎn)Visual C+ 6.0開發(fā)平臺(tái)的基本使用技巧網(wǎng)絡(luò)通信編程基本原理常見網(wǎng)絡(luò)工具軟件分析Visual C+ 6.0開發(fā)平臺(tái)Visual C+ 6.0是微軟推出的產(chǎn)品,它提供了強(qiáng)大的編譯能力以及良好的界面操作性。能夠?qū)+程序設(shè)計(jì)提供完善的編程環(huán)境。Visual C+ 6.0是可視化軟件開發(fā)平臺(tái),具有強(qiáng)大面向?qū)ο蠊δ茉诖?/p>
2、平臺(tái)下可以利用微軟已經(jīng)封裝好的基本類庫(kù),開發(fā)網(wǎng)絡(luò)通信軟件。 使用Visual C+ 6.0創(chuàng)建一個(gè)新工程第一步:?jiǎn)?dòng)并進(jìn)入Visual C+ 6.0的集成開發(fā)環(huán)境。創(chuàng)建一個(gè)新工程選擇“文件”“新建”,在彈出的對(duì)話框中選擇新建工程的類型創(chuàng)建一個(gè)新工程創(chuàng)建一個(gè)新工程新工程的運(yùn)行結(jié)果Visual C+ 6.0項(xiàng)目文件Visual C+ 6.0項(xiàng)目中的主要文件.dsp:VC開發(fā)環(huán)境生成的工程文件,非常重要。.dsw:VC開發(fā)環(huán)境生成的WorkSpace文件,用來(lái)把多個(gè)工程組織到一個(gè)WorkSpace中。.ncb:ncb是“No Compile Browser”的縮寫,其中存放了供ClassView、W
3、izardBar和Component Gallery使用的信息,由VC開發(fā)環(huán)境自動(dòng)生成。當(dāng)自動(dòng)完成功能出問題時(shí)可以刪除此文件。編譯工程后會(huì)自動(dòng)生成。.rc:資源定義文件。.clw:ClassWizard生成的用來(lái)存放類信息的文件。.aps:存放二進(jìn)制資源的中間文件,VC把當(dāng)前資源文件轉(zhuǎn)換成二進(jìn)制格式,并存放在APS文件中,以加快資源裝載速度。.h:用C/C+語(yǔ)言編寫的頭文件,通常用來(lái)定義數(shù)據(jù)類型,聲明變量、函數(shù)、結(jié)構(gòu)和類。.cpp:用C+語(yǔ)言編寫的源代碼文件。Visual C+ 6.0調(diào)試工具調(diào)試工具 網(wǎng)絡(luò)通信基礎(chǔ)面向連接的服務(wù) VS 面向無(wú)連接的服務(wù)面向連接的服務(wù):發(fā)送信息的源計(jì)算機(jī)必須首先
4、與接收信息的目的計(jì)算機(jī)建立連接。一旦連接建立起來(lái), 相互連接的計(jì)算機(jī)就可以進(jìn)行數(shù)據(jù)交換。它是可靠的。 面向無(wú)連接的服務(wù):發(fā)送信息的計(jì)算機(jī)把數(shù)據(jù)以一定的格式封裝在數(shù)據(jù)幀中,把目的地址和源地址加在信息頭上,然后把幀交給網(wǎng)絡(luò)進(jìn)行發(fā)送。無(wú)連接服務(wù)是不可靠的。計(jì)算機(jī)網(wǎng)絡(luò)分層TCP/IP協(xié)議主要協(xié)議在網(wǎng)絡(luò)層中的分布情況主要網(wǎng)絡(luò)協(xié)議TCP協(xié)議:傳輸控制協(xié)議(Transmission Control Protocol)。是面向連接的協(xié)議,它可以提供可靠傳輸服務(wù)。UDP協(xié)議:用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol)。UDP協(xié)議提供了用戶進(jìn)程的無(wú)連接服務(wù)。HTTP協(xié)議:超文本傳輸協(xié)議(Hyp
5、ertext Transfer Protocol)。提供了網(wǎng)頁(yè)瀏覽服務(wù),是現(xiàn)在應(yīng)用最廣的協(xié)議之一。FTP協(xié)議:文件傳輸控制協(xié)議(File Transfer Protocol)。提供了文件的傳輸功能和一些常用的文件操作。SMTP協(xié)議:簡(jiǎn)單郵件傳輸協(xié)議(Simple Mail Transfer Protocol)。提供了郵件的傳送服務(wù)。主要網(wǎng)絡(luò)協(xié)議TELNET協(xié)議:終端協(xié)議(Telnet Terminal Protocol)。提供了遠(yuǎn)程登錄服務(wù),允許用戶以虛擬終端方式訪問遠(yuǎn)程主機(jī)。ICMP協(xié)議:網(wǎng)間報(bào)文控制協(xié)議(Internet Control Message Protocol),它的功能是處理I
6、P主機(jī)或者路由器之間的差錯(cuò)和傳輸控制。ARP協(xié)議:地址解析協(xié)議(Address Resolution Protocol)。它的基本功能就是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。RARP協(xié)議:反向地址解析協(xié)議(Reverse Address Resolution Protocol)。負(fù)責(zé)把主機(jī)硬件地址映射為網(wǎng)絡(luò)地址,也就是把MAC地址轉(zhuǎn)化為對(duì)應(yīng)的IP地址。RARP協(xié)議的功能與ARP協(xié)議恰恰相反。網(wǎng)絡(luò)程序設(shè)計(jì)模型C/S結(jié)構(gòu)C/S結(jié)構(gòu)是網(wǎng)絡(luò)程序設(shè)計(jì)的基本模型,它是一個(gè)典型的分布式結(jié)構(gòu)。在C/S結(jié)構(gòu)中,服務(wù)器程序始終處于監(jiān)聽狀態(tài),當(dāng)被監(jiān)聽的服務(wù)端口處有服務(wù)請(qǐng)求時(shí),立即
7、響應(yīng)客戶的服務(wù)請(qǐng)求。客戶機(jī)在發(fā)出服務(wù)請(qǐng)求信號(hào)前,必須指定服務(wù)器地址和端口號(hào)才能獲得相應(yīng)的服務(wù)。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器,客戶端響應(yīng)速度快。 服務(wù)器端:1、打開一通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求。2、等待客戶請(qǐng)求到達(dá)該端口。3、接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。4、返回第二步,等待另一客戶請(qǐng)求5、關(guān)閉服務(wù)器??蛻舳耍?、打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。2、向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求3、請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。請(qǐng)求和應(yīng)答請(qǐng)求的基本過程 套接字
8、編程的基本原理什么是套接字?套接字(socket)是網(wǎng)絡(luò)計(jì)算機(jī)與應(yīng)用程序之間發(fā)送和接收數(shù)據(jù)的方式的一種抽象描述。它描述了兩個(gè)通信點(diǎn)之間的連接。確切的說(shuō),套接字(socket)是用來(lái)實(shí)現(xiàn)主機(jī)和主機(jī)通信的一個(gè)接口。通過它可以完成主機(jī)間的通信操作,它位于協(xié)議之上,屏蔽了底層的協(xié)議,讓用戶能夠?qū)崿F(xiàn)各種類型的通信操作。 最常用的套接字類型有三種 流(Stream)套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。 數(shù)據(jù)報(bào)(Datagram)套接字提供了一種無(wú)連接的服務(wù),是不可靠的。 原始(Raw)套接字原始套接字可以讀寫內(nèi)核沒有處理的IP數(shù)據(jù)包。討論:我們經(jīng)常使用的網(wǎng)絡(luò)通信軟件有哪些?我們機(jī)房使用的電子教室軟
9、件有哪些功能?Thank You !掃描可控計(jì)算機(jī)授課教師:網(wǎng)絡(luò)編程導(dǎo)入電子教室軟件主要功能是教師可以通過教師機(jī)程序控制和管理學(xué)生機(jī) 教師機(jī)端控制程序能夠主動(dòng)掃描學(xué)生機(jī),確定哪些學(xué)生已經(jīng)進(jìn)入電子教室,是可控計(jì)算機(jī) 本章通過簡(jiǎn)單的通信程序?qū)崿F(xiàn)掃描局域網(wǎng)內(nèi)可控計(jì)算機(jī)的功能 本章要點(diǎn)掃描可控計(jì)算機(jī)功能實(shí)現(xiàn)分析WinSock通信編程技術(shù)MFC網(wǎng)絡(luò)通信編程技術(shù)掃描可控計(jì)算機(jī)功能需求分析 教師機(jī)主動(dòng)聯(lián)系學(xué)生機(jī),如果不能與學(xué)生機(jī)建立聯(lián)系,則說(shuō)明學(xué)生機(jī)端沒有運(yùn)行該程序,該學(xué)生機(jī)不在可控范圍;反之,如果教師機(jī)與學(xué)生機(jī)成功的取得了聯(lián)系,則證明學(xué)生機(jī)已啟動(dòng)程序,處于可控狀態(tài)。教師機(jī)掃描學(xué)生機(jī)時(shí),應(yīng)該可以設(shè)置掃描范圍
10、,例如一個(gè)IP地址范圍,教師機(jī)與范圍內(nèi)的所有學(xué)生機(jī)逐一聯(lián)系,判斷其是否處于可控狀態(tài),將處于可控狀態(tài)的學(xué)生機(jī)顯示在教師機(jī)端的程序界面上。 設(shè)計(jì)程序界面 關(guān)鍵技術(shù)分析關(guān)鍵技術(shù)就是兩臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī)之間進(jìn)行通信 采用什么技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)通信?套接字(Socket) WinSock進(jìn)行面向連接通信編程WinSock實(shí)現(xiàn)基于TCP的客戶端/服務(wù)器通信 程序演示程序源代碼(見教材P18)程序代碼詳解頭文件和庫(kù)文件#include #pragma comment(lib,ws2_32.lib) 使用WinSock進(jìn)行編程開發(fā),需要頭文件和庫(kù)文件ws2_32.lib的支持。 程序代碼詳解 WSADATAWSADAT
11、A wsaData; if(ret=WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(初始化WinSock出錯(cuò));return 0;WSACleanup(); 程序代碼詳解 socket調(diào)用Socket()函數(shù)可以建立套接字函數(shù)原型:SOCKET socket( int af, int type, int protocol ) 參數(shù)af:套接字要使用的協(xié)議地址族,目前只提供AF_INET表示使用互聯(lián)網(wǎng)協(xié)議(IP)地址。參數(shù)type:描述套接字的類型,只能是SOCK_STREAM、SOCK_DGRAM、SOCK_RAW 中的一個(gè)。參數(shù)protocol:該套
12、接字使用的特定通信協(xié)定(如果使用者不指定則設(shè)為0)。 程序代碼詳解bind調(diào)用bind()函數(shù)為服務(wù)器端定義的監(jiān)聽套接字指定一個(gè)地址及監(jiān)聽端口(Port)int bind( SOCKET s, const Struct sockaddr FAR *name, int namelen ); 參數(shù)s:未綁定的套接字的對(duì)象名。參數(shù)name:套接字的地址值,是個(gè)結(jié)構(gòu)體。參數(shù)namelen:地址參數(shù)name的長(zhǎng)度。程序代碼詳解listen listen函數(shù)在TCP服務(wù)器端使用,通知協(xié)議內(nèi)核用戶進(jìn)程準(zhǔn)備接受接口上的連接請(qǐng)求int listen(SOCKET s, int backlog); 參數(shù)s:已綁定
13、但尚未連接的套接字句柄,也是由socket()函數(shù)創(chuàng)建的套接字句柄。參數(shù)backlog:待處理的連接隊(duì)列的最大長(zhǎng)度。當(dāng)連接的客戶數(shù)大于這個(gè)最大長(zhǎng)度并且服 程序代碼詳解acceptaccept函數(shù)在服務(wù)器端等待并接受客戶的連接,該函數(shù)返回一個(gè)新的套接字,該套接字可以用來(lái)與對(duì)方進(jìn)行通信,而原先的套接字還是處于監(jiān)聽狀態(tài)。 int accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen);參數(shù)s:表示處于監(jiān)聽模式的套接字句柄。參數(shù)addr:是SOCKADDR對(duì)象的地址。參數(shù)addrlen:表示addr參數(shù)的長(zhǎng)度。程序代碼詳解send s
14、end函數(shù)發(fā)送數(shù)據(jù)int send( SOCKET s, const char FAR *buf, int len, int flags );參數(shù)s:表示已連接的本地套接字描述符。參數(shù)buf:表示要發(fā)送的緩沖區(qū)數(shù)據(jù)。參數(shù)len:表示緩沖區(qū)的長(zhǎng)度。參數(shù)flags:表示標(biāo)志類型,可以為0,MSG_DONTROUTE,MSG_OOB。 程序代碼詳解recv recv函數(shù)從TCP連接的另一端接收數(shù)據(jù) int recv( SOCKET s, char FAR *buf, int len, int flags); 參數(shù)s:接收端套接字描述符。參數(shù)buf:指明一個(gè)緩沖區(qū),用來(lái)存放接收到的數(shù)據(jù)。參數(shù)len:
15、buf的長(zhǎng)度。參數(shù)flags:表示標(biāo)志,可以是0, MSG_PEEK, MSG_OOB。 一般置0。 程序代碼詳解 connectConnect函數(shù)完成通信的連接過程int connect(SOCKET s, const struct sockaddr FAR* name, int namelen); 參數(shù)s:表示是將要和服務(wù)器建立連接的套接字句柄。參數(shù)name:服務(wù)器的地址結(jié)構(gòu)參數(shù)namelen:地址名字name的長(zhǎng)度。MFC的CSocket類 微軟的MFC把復(fù)雜的WinSock API函數(shù)封裝到類里,這使得編寫網(wǎng)絡(luò)應(yīng)用程序更容易。 MFC中的CAsyncSocket類逐個(gè)封裝了WinSoc
16、k API CSocket類是由CAsyncSocket繼承而來(lái),繼承了它封裝的WinSock API CSocket類實(shí)現(xiàn)網(wǎng)絡(luò)通信編程過程 構(gòu)造一個(gè)CSocket對(duì)象。 使用這個(gè)對(duì)象的Create()成員函數(shù)產(chǎn)生一個(gè)socket對(duì)象。在客戶方程序中,除非需要數(shù)據(jù)報(bào)套接字,Create()函數(shù)一般情況下應(yīng)該使用默認(rèn)參數(shù)。而對(duì)于服務(wù)方程序,必須在調(diào)用Create時(shí)指定一個(gè)端口。如果是客戶方套接字,則調(diào)用Connect()函數(shù)與服務(wù)方套接字連接;如果是服務(wù)方套接字,則調(diào)用Listen()開始監(jiān)聽來(lái)自客戶方的連接請(qǐng)求,收到連接請(qǐng)求后,調(diào)用Accept()函數(shù)接受請(qǐng)求,建立連接。連接成功建立后,可以使
17、用Receive()和Send()函數(shù)進(jìn)行數(shù)據(jù)發(fā)送和接收工作。通信結(jié)束后,使用Close()函數(shù)銷毀CSocket對(duì)象。 CSocket類實(shí)現(xiàn)的面向連接的套接字通信過程 代碼詳解頭文件#include 頭文件afxsock.h中包含 CAsyncSocket 和 CSocket 類定義。代碼詳解 Create函數(shù)BOOL Create(UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
18、 LPCTSTR lpszSocketAddress = NULL); 參數(shù)nSocketPort:與套接字一起使用的端口號(hào),默認(rèn)值為0,表示自動(dòng)選擇端口號(hào)。參數(shù)nSocketType:指定要?jiǎng)?chuàng)建的套接字類型,默認(rèn)為流式套接字。參數(shù)lEvent:指定感興趣的網(wǎng)絡(luò)事件的掩碼位。參數(shù)lpszSocketAddress:指定套接字的網(wǎng)絡(luò)地址。 代碼詳解 Listen函數(shù)BOOL Listen(int nConnectionBacklog = 5); 參數(shù)nConnectionBacklog:指定連接請(qǐng)求隊(duì)列的最大連接數(shù)目,默認(rèn)為5。 代碼詳解Accept函數(shù)virtual BOOL Accept (
19、CAsyncSocket & rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL) ; 參數(shù)rConnectedSocket:用來(lái)進(jìn)行連接的新套接字的引用。參數(shù)lpSlpSockAddr:用來(lái)返回發(fā)送連接請(qǐng)求的套接字地址的SOCKADDR結(jié)構(gòu)指針。參數(shù)lpSockAddrLen:指向pSockAddr結(jié)構(gòu)中地址的字節(jié)長(zhǎng)度的指針。 代碼詳解 Connect函數(shù)BOOL Connect (LPCTSTR lpszHostAddress, UINT nHostPort); 參數(shù)lpszHostAddress
20、:用于要連接的服務(wù)器網(wǎng)絡(luò)地址。參數(shù)nHostPort:指定套接字應(yīng)用程序使用的端口號(hào)。代碼詳解Receive函數(shù)virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0); 參數(shù)lpBuf:接收數(shù)據(jù)的緩沖區(qū)。參數(shù)nBufLen:緩沖區(qū)的字節(jié)節(jié)長(zhǎng)度。參數(shù)nFlags:用來(lái)表示函數(shù)的實(shí)現(xiàn),默認(rèn)為0。 代碼詳解Send函數(shù)virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0); 參數(shù)lpBuf:要發(fā)送的數(shù)據(jù)的緩沖區(qū)地址。參數(shù)nBufLen:lpBuf緩沖區(qū)的字節(jié)長(zhǎng)
21、度。參數(shù)nFlags:指定函數(shù)的調(diào)用標(biāo)志,默認(rèn)值為0。代碼詳解Close函數(shù)該函數(shù)用來(lái)關(guān)閉套接字并釋放Socket描述符,其函數(shù)原型為:Virtual void Close ( ) ; 擴(kuò)展核心程序 首先建立兩個(gè)應(yīng)用程序,一個(gè)teacher和一個(gè)student。student程序應(yīng)首先啟動(dòng),teacher程序能夠主動(dòng)向所有student程序發(fā)出連接請(qǐng)求能夠成功建立連接的學(xué)生機(jī)就是可控學(xué)生機(jī),把其IP地址顯示在teacher程序界面上。 本章技能訓(xùn)練實(shí)例 實(shí)驗(yàn)題目:簡(jiǎn)單的考試報(bào)名系統(tǒng)實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康模赫莆帐褂肧ocket進(jìn)行通信的基本方法和簡(jiǎn)單控件編程實(shí)驗(yàn)內(nèi)容:開發(fā)一個(gè)服務(wù)器端程序,能夠接收客戶端發(fā)
22、來(lái)的信息;開發(fā)一個(gè)客戶端程序,能夠?qū)⑿畔l(fā)送給服務(wù)器端,可采用CSocket編程,也可以用WinSock編程。 Thank You !文件傳輸授課教師:網(wǎng)絡(luò)編程導(dǎo)入在電子教室軟件系統(tǒng)中,教師經(jīng)常需要通過教師機(jī)向所有學(xué)生下發(fā)文件,傳遞授課資料,有時(shí)也需要學(xué)生將完成的作業(yè)上傳到教師機(jī),這就涉及到一個(gè)文件傳輸?shù)膯栴},本章我們就通過一個(gè)簡(jiǎn)單的文件傳輸程序。 本章要點(diǎn)文件傳輸功能分析設(shè)計(jì)文件操作編程技術(shù)多線程編程技術(shù)文件下發(fā)程序?qū)崿F(xiàn)功能需求分析 包含兩個(gè)程序,一個(gè)發(fā)送端程序,一個(gè)接收端程序。發(fā)送端程序可以由用戶選擇要發(fā)送的文件。發(fā)送端程序可以指定發(fā)送對(duì)象,可以是一個(gè)IP范圍,也可以是某個(gè)IP地址。接收端
23、程序可以由用戶指定接收到的文件的存放地址。界面設(shè)計(jì) 關(guān)鍵技術(shù)分析 文件傳輸?shù)谋举|(zhì)用一句話概括就是:發(fā)送方將文件數(shù)據(jù)讀出來(lái),然后調(diào)用套接字的發(fā)送函數(shù)將數(shù)據(jù)傳輸?shù)浇邮辗?,接收方調(diào)用套接字接收函數(shù)接收數(shù)據(jù),然后重新建立文件并將數(shù)據(jù)寫入文件。 文件傳輸流程 發(fā)送文件功能的實(shí)現(xiàn)接收文件功能的實(shí)現(xiàn)流程代碼詳解文件操作 CFile類:CFile類是MFC文件類的基類,提供非緩沖方式的二進(jìn)制磁盤輸入、輸出功能;并直接通過派生類來(lái)支持文本文件和內(nèi)存文件。提供訪問本地文件內(nèi)容的功能,不支持訪問網(wǎng)絡(luò)文件的功能。使用CFile操作文件的基本過程是: 定義CFile對(duì)象打開要操作的文件 對(duì)文件/寫文件關(guān)閉文件文件操作O
24、pen()函數(shù)該函數(shù)的功能是打開指定文件。BOOL CFile:Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pException)參數(shù)lpszFileName:帶完整路徑的文件名,指定要打開的文件。參數(shù)nOpenFlags:指定文件打開方式,可以是多個(gè)標(biāo)志的組合。 文件操作Read()函數(shù) 該函數(shù)的功能是從文件中讀取文件內(nèi)容。virtual UINT CFile:Read( void* lpBuf, UINT nCount );參數(shù)lpBuf:存放讀出的文件內(nèi)容的空間地址。參數(shù)nCount:從文件讀出的最大字節(jié)數(shù)。 文
25、件操作 Write()函數(shù)該函數(shù)的功能是向文件中寫數(shù)據(jù)virtual void Write( const void* lpBuf, UINT nCount );參數(shù)lpBuf:存儲(chǔ)要寫入文件的數(shù)據(jù)的空間地址。參數(shù)nCount:要寫入文件的數(shù)據(jù)的字節(jié)數(shù)。 文件操作 Close()函數(shù)功能是關(guān)閉文件句柄。文件操作完畢必須調(diào)用Close()函數(shù)關(guān)閉文件。 第一步程序擴(kuò)展實(shí)現(xiàn)較大文件的傳輸 上面文件傳輸實(shí)例的功能并不強(qiáng)大,但是它的實(shí)現(xiàn)過程很簡(jiǎn)單,說(shuō)明了文件傳輸?shù)脑怼K雎粤苏鎸?shí)文件的大小在上面的代碼中,為了從文件中讀取數(shù)據(jù),首先獲得文件長(zhǎng)度,然后開辟一段和文件長(zhǎng)度匹配的內(nèi)存作為文件緩沖。但現(xiàn)在很多文
26、件動(dòng)輒幾百兆字節(jié),往往無(wú)法一次開辟如此大的內(nèi)存容納如此多的數(shù)據(jù)。所以對(duì)于大文件傳輸,這段代碼顯然不合適。解決方法:分段緩沖文件數(shù)據(jù)。實(shí)現(xiàn)方法詳見代碼 第二步程序擴(kuò)展同時(shí)向多個(gè)目標(biāo)傳輸文件 教師機(jī)通常需要控制整個(gè)教室所有的學(xué)生機(jī),需要進(jìn)行一對(duì)多的文件傳輸需要用戶在界面上指出需要發(fā)送文件的對(duì)象(例如學(xué)生機(jī)的IP地址范圍)考慮傳輸效率,需要采用多線程技術(shù)。 什么是多線程技術(shù)? 多線程是為了同步完成多項(xiàng)任務(wù)多線程不是為了提高運(yùn)行效率,而是為了通過提高資源使用效率來(lái)提高系統(tǒng)的效率。 線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行,也可以把它理解為代碼運(yùn)行的上下文。線程負(fù)責(zé)在單個(gè)程序里執(zhí)
27、行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。實(shí)現(xiàn)發(fā)送文件功能的主線程流程 多線程實(shí)現(xiàn)代碼在本程序中,多線程編程涉及三處代碼,第一處是創(chuàng)建一個(gè)新線程,使用CreateThread函數(shù):CreateThread(NULL,0,SendFileThread,(LPVOID)pMeg,NULL,NULL); 函數(shù)CreateThread是微軟在Windows API中提供的,可用于建立新線程。CreateThread將在主線程的基礎(chǔ)上創(chuàng)建一個(gè)新線程。多線程實(shí)現(xiàn)代碼第二處是定義線程函數(shù):ULONG WINAPI SendFileThread(LPVOID p);SendFileThread是線程的
28、名字,可根據(jù)需要自行定義應(yīng)該定義在對(duì)應(yīng)的頭文件中,且一定要定義為全局的。多線程實(shí)現(xiàn)代碼第三處是線程函數(shù)的實(shí)現(xiàn):ULONG WINAPI SendFileThread(LPVOID p)/此處寫實(shí)現(xiàn)線程具體功能的代碼線程的參數(shù)傳遞考慮到在創(chuàng)建每個(gè)新線程時(shí),需要將待發(fā)送文件的地址和發(fā)送對(duì)象的IP地址傳遞給新線程,因此需要傳遞兩個(gè)字符串參數(shù)給線程,按照創(chuàng)建線程函數(shù)的定義,只能傳遞一個(gè)指向結(jié)構(gòu)的指針,因此需要定義一個(gè)結(jié)構(gòu)體,專門存放需要傳遞給線程的數(shù)據(jù)。結(jié)構(gòu)體定義如下:typedef struct char ip15; /文件傳遞目的地IPchar fileAddr50; /帶路徑的文件名myMeg;
29、 線程的參數(shù)傳遞myMeg * pMeg; /定義一個(gè)指向myMeg結(jié)構(gòu)體的指針pMeg=(myMeg*) malloc(sizeof(myMeg); /給指針分配空間memcpy(pMeg-ip,ip,15); /將IP地址放入結(jié)構(gòu)體memcpy(pMeg-fileAddr,file,50); /將文件地址放入結(jié)構(gòu)體CreateThread(NULL,0,SendFileThread,(LPVOID)pMeg,NULL,NULL); /創(chuàng)建一個(gè)新線程,將結(jié)構(gòu)體指針作為參數(shù)傳遞給線程線程的參數(shù)傳遞在新線程中,可以從參數(shù)中取出對(duì)應(yīng)的數(shù)據(jù),代碼如下:ULONG WINAPI SendFileThr
30、ead(LPVOID p)myMeg *meg = (myMeg *)p;CString strIP=meg-ip;CString fileAddr=meg-fileAddr; 本章技能訓(xùn)練實(shí)例網(wǎng)絡(luò)考試報(bào)名系統(tǒng)擴(kuò)展實(shí)驗(yàn)題目:多線程考試報(bào)名系統(tǒng)服務(wù)器的實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康模赫莆斩嗑€程編程技術(shù)和文件操作技術(shù)要求:服務(wù)器端采用多線程技術(shù),在線程中使用循環(huán)接收客戶的報(bào)名信息。Thank You !簡(jiǎn)易聊天室授課教師:網(wǎng)絡(luò)編程導(dǎo)入在電子教室軟件系統(tǒng)中,教師經(jīng)常需要根據(jù)課程內(nèi)容將學(xué)生分組,每個(gè)小組完成一個(gè)任務(wù)。每個(gè)小組的小組成員之間需要進(jìn)行討論,所以需要有一個(gè)簡(jiǎn)單的聊天室功能,使多個(gè)成員之間可以很方便的進(jìn)行溝通和
31、交流。本章我們就通過一個(gè)簡(jiǎn)單的聊天室程序,來(lái)介紹一下使用UDP協(xié)議進(jìn)行通信的相關(guān)技術(shù)。 本章要點(diǎn)聊天室功能分析設(shè)計(jì)WinSock實(shí)現(xiàn)UDP通信CSocket類實(shí)現(xiàn)UDP通信聊天室開發(fā) 功能需求分析 聊天室服務(wù)器功能:?jiǎn)?dòng)一個(gè)新的聊天室。能記錄所有登錄的聊天者信息。能接收聊天者程序發(fā)來(lái)的聊天信息,并顯示到界面上。能把一個(gè)聊天者發(fā)來(lái)的信息發(fā)送給所有其他聊天者。聊天者程序功能:能登錄到聊天室服務(wù)器。能發(fā)送聊天信息給聊天室服務(wù)器。能接收服務(wù)器發(fā)回的其他人的聊天信息,并顯示在自己的界面上。界面設(shè)計(jì) 關(guān)鍵技術(shù)分析 聊天室的核心功能就是多個(gè)點(diǎn)之間的數(shù)據(jù)傳遞本章講解另一種面向非連接的基于UDP協(xié)議的socke
32、t通信技術(shù)來(lái)實(shí)現(xiàn)聊天室實(shí)例 面向非連接的通信“面向非連接”就是在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送。與現(xiàn)在風(fēng)行的手機(jī)短信非常相似:你在發(fā)短信的時(shí)候,只需要輸入對(duì)方手機(jī)號(hào)就可以了。UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去。 UDP通信流程圖 核心程序?qū)崿F(xiàn)發(fā)送和接收的的數(shù)據(jù)包的定義 struct MEGint code; /包的編號(hào)char data500; /數(shù)據(jù)內(nèi)容 Meg; code:數(shù)據(jù)包的編號(hào)data:要傳輸?shù)臄?shù)據(jù)核心程序發(fā)送UDP數(shù)據(jù)包 void CSe
33、ndUDPDlg:OnSend() UpdateData(true); struct MEG /發(fā)送數(shù)據(jù)對(duì)象的定義int code;/包的編碼char data500; Meg;CSocket m_SendSocket;/構(gòu)造一個(gè)套接字對(duì)象Meg.code=1;strcpy(Meg.data,m_message); /發(fā)送數(shù)據(jù)的初始化int port=8888;/對(duì)方的監(jiān)聽端口m_SendSocket.Create(6666,SOCK_DGRAM);/創(chuàng)建一個(gè)套接字句柄(UDP)m_SendSocket.SendTo( &Meg,sizeof(Meg),port,m_ip);m_SendSoc
34、ket.Close(); 核心程序接收UDP數(shù)據(jù)包void CReceiveUDPDlg:OnServer() struct MEGint code;/包的編碼char data500; *pMeg;CSocket m_ReceiveSocket;/構(gòu)造一個(gè)套接字對(duì)象char *buff512;m_ReceiveSocket.Create(8888,SOCK_DGRAM);m_ReceiveSocket.Receive(buff,512);pMeg=(struct MEG*)buff;/非常關(guān)鍵m_show.AddString(pMeg-data);m_ReceiveSocket.Close(
35、); 程序擴(kuò)展實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)聊天 接收對(duì)方聊天信息功能流程 程序擴(kuò)展實(shí)現(xiàn)聊天室 聊天室程序設(shè)計(jì)的思路是由一個(gè)服務(wù)器端程序和一個(gè)聊天者端程序組成。服務(wù)器端程序主要負(fù)責(zé)記錄所有進(jìn)入本聊天室的聊天者的IP地址,并且接收所有聊天者的信息,將每個(gè)聊天者發(fā)來(lái)的信息轉(zhuǎn)發(fā)給所有聊天者。聊天者程序可以發(fā)送聊天信息給服務(wù)器,同時(shí)可以接收服務(wù)器發(fā)送回來(lái)的信息,并顯示到聊天記錄界面上。 聊天室服務(wù)器端程序主要功能:(1)記錄所有進(jìn)入本聊天室的聊天者IP(以便轉(zhuǎn)發(fā)其他聊天者的聊天信息)。(2)啟動(dòng)一個(gè)子線程,用于接收聊天者數(shù)據(jù)包。(3)接到數(shù)據(jù)包,取出IP地址,存入聊天者列表(重復(fù)的不要)。(4)將接收到的聊天信息轉(zhuǎn)發(fā)給聊
36、天者列表中的每個(gè)聊天者。(5)將接收到的聊天信息添加到界面的列表控件中。 聊天室服務(wù)器功能流程 聊天者程序功能:(1)進(jìn)入聊天室,發(fā)送數(shù)據(jù)包給聊天室服務(wù)器。(2)接收服務(wù)器發(fā)送回來(lái)的信息,并顯示到聊天記錄界面上。實(shí)現(xiàn)代碼詳見教材本章技能訓(xùn)練實(shí)例 題目一:將第一章的掃描可控計(jì)算機(jī)程序改為用UDP協(xié)議的通信技術(shù)實(shí)現(xiàn)。題目二:將前一章的網(wǎng)絡(luò)考試報(bào)名系統(tǒng)改為基于UDP協(xié)議的通信技術(shù)實(shí)現(xiàn)。題目三:模仿群的模式,給你的幾個(gè)好朋友建立一個(gè)共用的聊天群。可以幾個(gè)人一起討論需求和設(shè)計(jì),在本章的簡(jiǎn)易聊天室程序基礎(chǔ)上完善和開發(fā),完成這個(gè)小應(yīng)用軟件,并在實(shí)際使用過程中測(cè)試它。 Thank You !網(wǎng)絡(luò)會(huì)議室授課教師
37、:網(wǎng)絡(luò)編程導(dǎo)入網(wǎng)絡(luò)會(huì)議室與聊天室程序類似,其本質(zhì)就是一種多點(diǎn)群發(fā)的的通信方式。在電子教室軟件的實(shí)際應(yīng)用過程中,經(jīng)常需要組織分小組進(jìn)行討論,這時(shí)就需要建立幾個(gè)組群,每個(gè)組內(nèi)可以發(fā)起討論,交流意見,這就是網(wǎng)絡(luò)會(huì)議室應(yīng)用程序。本章的網(wǎng)絡(luò)會(huì)議室功能雖與上一章的聊天室類似,但采用的是一種更好的實(shí)現(xiàn)方法IP多播技術(shù)。 本章要點(diǎn)網(wǎng)絡(luò)會(huì)議室功能分析設(shè)計(jì)IP廣播技術(shù)IP多播技術(shù) 功能需求分析 網(wǎng)絡(luò)會(huì)議室需要有以下主要功能:用戶可以選擇參加某個(gè)會(huì)議用戶可以在會(huì)議上發(fā)表言論,并且用戶的發(fā)言會(huì)即時(shí)傳遞給每個(gè)參加會(huì)議的人用戶可以隨時(shí)看到參加會(huì)議的其他人的發(fā)言用戶可以隨時(shí)選擇退出會(huì)議。需要時(shí),還可以再加入進(jìn)來(lái)。 界面設(shè)計(jì)
38、 關(guān)鍵技術(shù)分析 根據(jù)參與一次通信的對(duì)象的多少,可將通信分為兩大類:一類是點(diǎn)對(duì)點(diǎn)通信,也稱其為單播通信,TCP協(xié)議僅支持這種單播通信方式一類是多點(diǎn)通信,也稱為群或組通信,UDP協(xié)議既支持單播通信方式,又支持多點(diǎn)通信方式。本章研究?jī)?nèi)容是組通信廣播通信所謂廣播是指一種同時(shí)與網(wǎng)絡(luò)中所有主機(jī)進(jìn)行交互數(shù)據(jù)的通信方式,傳輸者通過一次數(shù)據(jù)傳輸就可以使網(wǎng)絡(luò)上的所有主機(jī)接收到這個(gè)數(shù)據(jù)信息。廣播通信的主要用途是資源發(fā)現(xiàn)和減少網(wǎng)絡(luò)數(shù)據(jù)流量。用于指示網(wǎng)絡(luò)中所有主機(jī)的地址稱為廣播地址。廣播地址有直接地址和有限地址之分。直接廣播地址適合于向一個(gè)指定網(wǎng)絡(luò)(已知網(wǎng)絡(luò)號(hào))發(fā)送數(shù)據(jù)包的情況,若不知道網(wǎng)絡(luò)號(hào),又要向本地網(wǎng)絡(luò)發(fā)送廣播數(shù)
39、據(jù)包,就需要使用有限廣播地址55 。 核心程序IP廣播 一個(gè)IP廣播程序分成兩個(gè)部分,一個(gè)是廣播端,一個(gè)是接收端。廣播流程:廣播端界面關(guān)鍵代碼設(shè)置套接字廣播功能setsockopt(SendSocket, SOL_SOCKET, SO_BROADCAST, (char FAR *)&op, sizeof(op);設(shè)置有限廣播地址Addr.sin_addr.s_addr=inet_addr(55);代碼詳解Setsockopt()函數(shù)setsockopt()函數(shù)用于任意類型、任意狀態(tài)套接字的設(shè)置選項(xiàng)值,選項(xiàng)影響套接字的操作。int PASCAL FAR setsockopt( SOCKET s,
40、 int level, int optname, const char FAR* optval, int optlen);參數(shù)s:要設(shè)置的套接字對(duì)象。參數(shù)level:選項(xiàng)定義的層次,如SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP等。參數(shù)optname:需設(shè)置的選項(xiàng)。參數(shù)optval:指針,指向存放選項(xiàng)值的緩沖區(qū)。參數(shù)optlen:optval緩沖區(qū)的長(zhǎng)度。SOL_SOCKET級(jí)別對(duì)應(yīng)的參數(shù)optname選項(xiàng)值如果是SO_BROADCAST,則代表允許套接字接收和發(fā)送廣播消息接收廣播信息端界面IP多播的網(wǎng)絡(luò)會(huì)議室 多播是指一種同時(shí)與多臺(tái)主機(jī)進(jìn)行交互數(shù)據(jù)的通信方式,傳輸者通過
41、一次傳輸就將數(shù)據(jù)信息傳送給一組接收者。與廣播不同的是多播只向事先規(guī)劃好的多播組(由多臺(tái)主機(jī)組成)發(fā)送數(shù)據(jù),而不是向某個(gè)網(wǎng)絡(luò)的所有主機(jī)發(fā)送數(shù)據(jù)。多播組是零個(gè)或多個(gè)使用同一IP目的地址的主機(jī)集合,其成員在位置上和數(shù)量上均沒有任何限制。多播不局限于局域網(wǎng),也可用于廣域網(wǎng)。 多播地址 IP地址空間被劃分為A、B、C三類。第四類即D類地址被保留用做多播地址。 從到55間的所有IP地址都屬于D類地址多播地址的范圍是55 IP多播的網(wǎng)絡(luò)會(huì)議室 首先我們?cè)O(shè)計(jì)了三個(gè)網(wǎng)絡(luò)會(huì)議室,它們的多播地址分別是“8”、“9”和“0”。用戶可以選擇進(jìn)入哪個(gè)會(huì)議室(多播組)參與討論。凡是多播組成員都可以向全組發(fā)送數(shù)據(jù)信息,且都可
42、以看到本組成員發(fā)送的數(shù)據(jù)信息。每個(gè)成員都可以隨時(shí)離開這個(gè)多播組,也可以再次加入進(jìn)來(lái)。 程序界面 頭文件和庫(kù)文件#include #include #pragma comment(lib,ws2_32.lib)加入和退出多播組加入多播組代碼: setsockopt(recvSocket,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *)&mq,sizeof(mq);退出多播組代碼:setsockopt(recvSocket,IPPROTO_IP,IP_DROP_MEMBERSHIP,(char*)&mq, sizeof(mq);兩條代碼的差別在第三個(gè)參數(shù)上。當(dāng)參數(shù)leve
43、l的值是IPPROTO_IP時(shí),對(duì)應(yīng)的參數(shù)optname值為IP_ADD_MEMBERSHIP表示加入多播組,IP_DROP_MEMBERSHIP表示退出多播組。 本章技能訓(xùn)練實(shí)例 局域網(wǎng)廣播報(bào)時(shí)系統(tǒng)該程序分成兩個(gè)部分,一個(gè)是發(fā)送時(shí)間數(shù)據(jù)程序,一個(gè)是接收時(shí)間程序。發(fā)送端程序取本機(jī)的系統(tǒng)時(shí)間,然后以廣播通信的方式發(fā)送給本網(wǎng)絡(luò)上的所有主機(jī),接收端程序接收到廣播的時(shí)間數(shù)據(jù),并在界面上顯示該時(shí)間。Thank You !查詢本地計(jì)算機(jī)配置授課教師:網(wǎng)絡(luò)編程導(dǎo)入內(nèi)聯(lián)網(wǎng)經(jīng)常用在企業(yè)的局域網(wǎng)并使用分布式的應(yīng)用程序,而分布式的應(yīng)用程序宿主是本地計(jì)算機(jī),如何正確地獲得本地計(jì)算機(jī)的網(wǎng)絡(luò)協(xié)議及配置信息,對(duì)于更深入地編
44、寫網(wǎng)絡(luò)應(yīng)用程序是一件很重要的事。 本章要點(diǎn)獲取主機(jī)名和IP地址讀取注冊(cè)表查詢本機(jī)網(wǎng)卡地址查詢本機(jī)子網(wǎng)掩碼查詢本機(jī)網(wǎng)關(guān)查詢本機(jī)DNS設(shè)置功能需求分析 開發(fā)一個(gè)簡(jiǎn)單的查詢工具,可以查詢本機(jī)的基本軟硬件配置,本機(jī)的基本網(wǎng)絡(luò)配置,包括:計(jì)算機(jī)名IP地址操作系統(tǒng)CPU網(wǎng)卡地址子網(wǎng)掩碼DNS服務(wù)器網(wǎng)關(guān)界面設(shè)計(jì)獲取主機(jī)名和IP地址 程序運(yùn)行界面獲取本機(jī)計(jì)算機(jī)名源代碼WSADATA wsaData;WSAStartup(MAKEWORD(2,2),&wsaData); char HostName128;BOOL bRet;bRet = gethostname(HostName, 128);if( bRet!=
45、 0 )MessageBox(獲取計(jì)算機(jī)名錯(cuò)誤!,提示);return;CString strMeg = HostName;strMeg = 本機(jī)的計(jì)算機(jī)名是: + strMeg;m_show.InsertString(-1,strMeg);WSACleanup();獲取本機(jī)IP地址的源代碼 WSADATA wsaData;WSAStartup(MAKEWORD(2,2),&wsaData);char HostName128;struct hostent* pHost;gethostname(HostName, 128);pHost = gethostbyname(HostName); int
46、 i=0;CString strIP;while(pHost-h_addr_listi != NULL) strIP = inet_ntoa(*(struct in_addr *)pHost- h_addr_listi); CString str=本機(jī)的IP地址: + strIP;m_show.InsertString(-1,str);i+; WSACleanup(); 代碼詳解gethostname函數(shù)該函數(shù)可以獲取本地主機(jī)名,若無(wú)錯(cuò)誤,返回0;否則,返回SOCKET_ERROR。gethostname (char* name, int namelen);參數(shù)name:用于指向所獲取本地主機(jī)
47、名的緩沖區(qū)地址。參數(shù)namelen:緩沖區(qū)的大小,以字節(jié)示。代碼詳解gethostbyname函數(shù)該函數(shù)可以從主機(jī)名數(shù)據(jù)庫(kù)中得到對(duì)應(yīng)的“主機(jī)”(由名字和地址標(biāo)識(shí))。若無(wú)錯(cuò)誤,函數(shù)返回一個(gè)指向hostent結(jié)構(gòu)的指針,它可標(biāo)識(shí)一個(gè)“主機(jī)”列表。struct hostent * FAR gethostbyname( const char* name );參數(shù)name:是主機(jī)名。 讀注冊(cè)表獲取本機(jī)的操作系統(tǒng)信息和CPU信息需要查詢注冊(cè)表,從注冊(cè)表中讀出所需要的信息,然后顯示到界面上。什么是注冊(cè)表?注冊(cè)表是Windows程序員建造的一個(gè)復(fù)雜的信息數(shù)據(jù)庫(kù),它是多層次式的。注冊(cè)表由鍵(或稱“項(xiàng)”)、子鍵(
48、子項(xiàng))和值項(xiàng)構(gòu)成。一個(gè)鍵就是分支中的一個(gè)文件夾,而子鍵就是這個(gè)文件夾中的子文件夾,子鍵同樣是一個(gè)鍵。一個(gè)值項(xiàng)則是一個(gè)鍵的當(dāng)前定義,由名稱、數(shù)據(jù)類型以及分配的值組成。一個(gè)鍵可以有一個(gè)或多個(gè)值,每個(gè)值的名稱各不相同,如果一個(gè)值的名稱為空,則該值為該鍵的默認(rèn)值。 查看注冊(cè)表“開始”“運(yùn)行”中輸入regedit命令,然后回車,會(huì)彈出注冊(cè)表編輯器界面 操作注冊(cè)表的流程 操作注冊(cè)表 使用CRegKey類 CRegKey類提供的幾個(gè)重要函數(shù): Open函數(shù)打開注冊(cè)表QueryValue函數(shù)讀注冊(cè)表SetValue函數(shù)寫注冊(cè)表Close函數(shù)關(guān)閉注冊(cè)表代碼詳解Open函數(shù)打開注冊(cè)表中的主鍵。若成功,返回ERRO
49、R_SUCCESS,失敗則返回錯(cuò)誤值。LONG Open( HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired = KEY_ALL_ACCESS );參數(shù)hKeyParent:需打開的鍵的句柄。參數(shù)lpszKeyName:需打開的鍵所在的注冊(cè)表的路徑。 參數(shù)samDesired:注冊(cè)表訪問的權(quán)限,默認(rèn)值為KEY_ALL_ACCESS。 代碼詳解QueryValue函數(shù)讀取注冊(cè)表中鍵值項(xiàng)的鍵值,若成功,返回ERROR_SUCCESS,失敗則返回錯(cuò)誤值。LONG QueryValue( DWORD& dwValue, LPCTSTR lp
50、szValueName );參數(shù)dwValue:DWORD數(shù)據(jù)類型的鍵值。參數(shù)lpszValueName:所讀取鍵值項(xiàng)的名稱。LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount );參數(shù)szValue:字符串?dāng)?shù)據(jù)類型的鍵值。參數(shù)lpszValueName:所讀取鍵值項(xiàng)的名稱。參數(shù)pdwCount:字符串的長(zhǎng)度。代碼詳解 SetValue函數(shù)LONG SetValue( DWORD dwValue, LPCTSTR lpszValueName );參數(shù)dwValue:需要寫入的DWORD類型鍵值。參數(shù)lp
51、szValueName:所寫入的鍵值項(xiàng)名稱,如果不存在,則增加一個(gè)新的鍵值項(xiàng)。LONG SetValue( LPCTSTR lpszValue, LPCTSTR lpszValueName = NULL );參數(shù)lpszValue:需要寫入的字符串類型鍵值。參數(shù)lpszValueName:所寫入的鍵值項(xiàng)名稱,如果不存在,則增加一個(gè)新的鍵值項(xiàng)。查詢本機(jī)網(wǎng)卡地址 程序運(yùn)行界面獲取MAC地址流程 代碼詳解頭文件和庫(kù)文件 NetBIOS中所用的函數(shù)聲明、常數(shù)等等均是在頭文件nb30.h內(nèi)定義的,使用NetBIOS還須連接庫(kù)netapi32.lib #include #pragma comment(li
52、b,Netapi32.lib)代碼詳解Netbios函數(shù) Win32應(yīng)用程序可以使用Network Basic Input/Output System(NetBIOS)接口與網(wǎng)絡(luò)中的其他計(jì)算機(jī)上的應(yīng)用程序進(jìn)行通訊UCHAR Netbios( PNCB pncb ); 參數(shù)pncb:指向網(wǎng)絡(luò)控制塊的指針。返回值放在pncb指向的結(jié)構(gòu)體里。查詢本機(jī)子網(wǎng)掩碼 子網(wǎng)掩碼(subnet mask)又叫網(wǎng)絡(luò)掩碼、地址掩碼、子網(wǎng)絡(luò)遮罩,它是一種用來(lái)指明一個(gè)IP地址的哪些位標(biāo)識(shí)的是主機(jī)所在的子網(wǎng)以及哪些位標(biāo)識(shí)的是主機(jī)的位掩碼。子網(wǎng)掩碼不能單獨(dú)存在,它必須結(jié)合IP地址一起使用。子網(wǎng)掩碼只有一個(gè)作用,就是將某個(gè)I
53、P地址劃分成網(wǎng)絡(luò)地址和主機(jī)地址兩部分。 查詢子網(wǎng)掩碼源代碼PIP_ADAPTER_INFO pAdapterInfo;PIP_ADAPTER_INFO pAdapter = NULL;DWORD dwRetVal = 0;pAdapterInfo = (IP_ADAPTER_INFO *)malloc (sizeof (IP_ADAPTER_INFO) );unsigned long ulOutBufLen = sizeof(IP_ADAPTER_INFO);GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) ;/獲得本地計(jì)算機(jī)的網(wǎng)絡(luò)信息函數(shù)dwRetVa
54、l = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen);pAdapter = pAdapterInfo;while (pAdapter) CString strSubNetMask;strSubNetMask.Format(子網(wǎng)掩碼:%sn, pAdapter-IpAddressList.IpMask. String);MessageBox(strSubNetMask);pAdapter = pAdapter-Next;代碼詳解GetAdaptersInfo函數(shù) 函數(shù)參數(shù)中的PIP_ADAPTER_INFO結(jié)構(gòu)包含了本地計(jì)算機(jī)上一個(gè)特定網(wǎng)絡(luò)適配器的信息
55、,從而能夠獲取所需的信息,如子網(wǎng)掩碼、網(wǎng)卡信息和默認(rèn)網(wǎng)關(guān)等內(nèi)容DWORD GetAdaptersInfo( PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);參數(shù)pAdapterInfo:指向IP_ADAPTER_INFO結(jié)構(gòu)的指針參數(shù)pOutBufLen:一個(gè)ULONG變量的指針,表示指向pAdapterInfo結(jié)構(gòu)的大小。查詢本機(jī)網(wǎng)關(guān)信息 獲取網(wǎng)關(guān)信息程序與前面獲取子網(wǎng)掩碼程序?qū)崿F(xiàn)方法基本相同,也是通過GetAdaptersInfo()函數(shù)實(shí)現(xiàn)的。 查詢本機(jī)DNS設(shè)置 DNS 是域名系統(tǒng) (Domain Name System) 的縮寫,該
56、系統(tǒng)用于命名組織到域?qū)哟谓Y(jié)構(gòu)中的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)。在Internet上域名與IP地址之間是一對(duì)一(或者多對(duì)一)的,域名雖然便于人們記憶,但機(jī)器之間只能互相認(rèn)識(shí)IP地址域名和IP地址之間的轉(zhuǎn)換工作稱為域名解析,域名解析需要由專門的域名解析服務(wù)器來(lái)完成,DNS就是進(jìn)行域名解析的服務(wù)器。代碼解析GetNetworkParams()函數(shù)功能是獲取本地計(jì)算機(jī)的網(wǎng)絡(luò)參數(shù), 從而獲得計(jì)算機(jī)的DNS設(shè)置。成功返回TRUE,失敗返回FALSE。該函數(shù)在頭文件Iphlpapi.h中定義,需要庫(kù)文件Iphlpapi.lib的支持。DWORD GetNetworkParams(PFED_INFO pFixedInfo
57、, PULONG pOutBufLen);參數(shù)pFixedInfo:指向FIXED_INFO結(jié)構(gòu)的指針,該結(jié)構(gòu)獲取本地計(jì)算機(jī)的網(wǎng)絡(luò)參數(shù)。參數(shù)pOutBufLen:指向一個(gè)ULONG變量的指針,該ULONG變量表示指向pFixedInfo結(jié)構(gòu)的大小。 課堂練習(xí)題操作注冊(cè)表用的類是 。注冊(cè)表由 、子鍵(子項(xiàng))和 構(gòu)成。 的作用就是將某個(gè)IP地址劃分成網(wǎng)絡(luò)地址和主機(jī)地址兩部分。域名便于人們記憶,但機(jī)器之間只能互相認(rèn)識(shí)IP地址,因此需要將域名與IP地址進(jìn)行轉(zhuǎn)換,稱為 。 Thank You !局域網(wǎng)信息查詢授課教師:網(wǎng)絡(luò)編程導(dǎo)入局域網(wǎng)的特點(diǎn)是網(wǎng)速快,距離短。因此,局域網(wǎng)編程也是網(wǎng)絡(luò)編程技術(shù)應(yīng)用的重要領(lǐng)
58、域,尤其是在Windows網(wǎng)絡(luò)系統(tǒng)中,鄰近的計(jì)算機(jī)可以通過網(wǎng)上鄰居進(jìn)行近距離的交流。共享文件的功能有效地替代了利用其他協(xié)議傳輸文件的繁瑣。將網(wǎng)絡(luò)應(yīng)用工具集成于操作系統(tǒng)是Windows的一個(gè)很好的特點(diǎn)。 本章要點(diǎn)IP地址與主機(jī)名之間的轉(zhuǎn)換獲取局域網(wǎng)中的計(jì)算機(jī)名和IP地址查找網(wǎng)上鄰居局域網(wǎng)消息發(fā)送IP地址與主機(jī)名之間的轉(zhuǎn)換 程序界面IP地址轉(zhuǎn)換成計(jì)算機(jī)名 struct hostent FAR *host=gethostbyaddr (char *)(&a),4,AF_INET);if(host=NULL)AfxMessageBox(錯(cuò)誤的IP地址);return;CString HostName=
59、host-h_name; 主機(jī)名轉(zhuǎn)換成IP地址 struct hostent* pHost;pHost = gethostbyname(m_name); int i=0;CString strIP;while(pHost-h_addr_listi != NULL) strIP = inet_ntoa(*(struct in_addr *) pHost-h_addr_listi); CString str=本機(jī)的IP地址: + strIP;MessageBox(str,NULL,MB_OK);i+; 代碼詳解gethostbyaddr函數(shù)該函數(shù)返回對(duì)應(yīng)于給定地址的包含主機(jī)名字和地址信息的host
60、ent結(jié)構(gòu)指針。struct hostent FAR *PASCAL FAR gethostbyaddr(const char FAR * addr, int len, int type);參數(shù)addr:指向網(wǎng)絡(luò)字節(jié)順序地址的指針。參數(shù)len: 地址的長(zhǎng)度,在AF_INET類型中為4。參數(shù)type:地址類型,應(yīng)為AF_INET。 代碼詳解gethostbyname函數(shù)從主機(jī)名數(shù)據(jù)庫(kù)中得到對(duì)應(yīng)的“主機(jī)”(由名字和地址標(biāo)識(shí))。注意這里得到的“主機(jī)”可能是多個(gè)而不止一個(gè)。struct hostent * FAR gethostbyname( const char* name );參數(shù)name:是主機(jī)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省哈爾濱市第三十二中學(xué)2025屆高三英語(yǔ)第一學(xué)期期末檢測(cè)試題含解析
- 河北深州市長(zhǎng)江中學(xué) 2025屆數(shù)學(xué)高二上期末經(jīng)典試題含解析
- 2025屆吉林省長(zhǎng)春市第十九中學(xué)高二生物第一學(xué)期期末經(jīng)典試題含解析
- 湖南平江二中2025屆高二上生物期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 山西省大同市平城區(qū)第一中學(xué)2025屆英語(yǔ)高三第一學(xué)期期末調(diào)研試題含解析
- 2025屆安徽合肥八中生物高一上期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 2025屆湖北省武漢二中高三數(shù)學(xué)第一學(xué)期期末監(jiān)測(cè)模擬試題含解析
- 關(guān)于方程的問題課件
- 垃圾清運(yùn)服務(wù)合同樣板
- 鄉(xiāng)村體育場(chǎng)館裝修合作協(xié)議
- 期中測(cè)試卷(1-4單元)(試題)-2024-2025學(xué)年人教版數(shù)學(xué)四年級(jí)上冊(cè)
- 應(yīng)用文寫作+以“A+Clean-up+Activity”為題給學(xué)校英語(yǔ)報(bào)寫一篇新聞報(bào)道+講義 高二上學(xué)期月考英語(yǔ)試題
- 校園反詐騙課件
- 2024-2030年中國(guó)工業(yè)脫水機(jī)行業(yè)發(fā)展?fàn)顩r及投資方向分析報(bào)告
- 網(wǎng)絡(luò)傳播法導(dǎo)論(第2版)課件 第五章 侵害名譽(yù)權(quán)
- 環(huán)評(píng)手續(xù)轉(zhuǎn)讓協(xié)議(2篇)
- 胸外科快速康復(fù)護(hù)理課件
- 醫(yī)院污水處理運(yùn)維服務(wù)投標(biāo)方案(技術(shù)方案)
- 2024年高考最后一套壓軸卷-文綜試題(全國(guó)甲卷)含解析
- 蘇教版數(shù)學(xué)長(zhǎng)方體與正方體表面積解析
- 2024年國(guó)家開放大學(xué)形考作業(yè)答案
評(píng)論
0/150
提交評(píng)論