(整理)windows下的C語(yǔ)言網(wǎng)絡(luò)編程._第1頁(yè)
(整理)windows下的C語(yǔ)言網(wǎng)絡(luò)編程._第2頁(yè)
(整理)windows下的C語(yǔ)言網(wǎng)絡(luò)編程._第3頁(yè)
(整理)windows下的C語(yǔ)言網(wǎng)絡(luò)編程._第4頁(yè)
(整理)windows下的C語(yǔ)言網(wǎng)絡(luò)編程._第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余8頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精品文檔Windows下C語(yǔ)言網(wǎng)絡(luò)編程C語(yǔ)言的學(xué)習(xí),一般的方式是,先學(xué) C,然后是C+,最好還要有匯編語(yǔ)言和微機(jī)原理 基礎(chǔ),然后才是 Visual C+。這樣的方式,對(duì)學(xué)習(xí)者來(lái)說(shuō),要花費(fèi)很多時(shí)間和耐力。而在學(xué) 校教學(xué)中,也沒(méi)有時(shí)間深入學(xué)習(xí)Windows編程的實(shí)用技術(shù)了。其實(shí),具有了 C語(yǔ)言基礎(chǔ)后,再有一些基本的 C+類(lèi)的概念,就可以直接學(xué)習(xí) WindowsC編程了。、走近Windows C語(yǔ)言很多語(yǔ)言都把顯示一個(gè)“Hello,World!做為第一個(gè)入門(mén)程序,C語(yǔ)言的第一個(gè)程序是這樣的:#include main()printf( Hello,World! );如果把main函數(shù)寫(xiě)成帶參數(shù)的 m

2、ain函數(shù),應(yīng)該是:#includemain(int arge,char *argv口)printf( Hello,World! );Windows C的第一個(gè)程序和這個(gè)程序在形式和原理上都是一致的,只是有兩點(diǎn)不同:1 .主函數(shù)接收的形參不只是命令行中的字符串的個(gè)數(shù)和字符串的首地址。2 . C語(yǔ)言的很多函數(shù)在 Windows C中都可以繼續(xù)使用,但象printf ()屏幕顯示等函數(shù)就不能繼續(xù)使用了。因?yàn)?Windows是多任務(wù)操作系統(tǒng),屏幕已不再為某一個(gè)應(yīng)用程序所獨(dú) 有,Windows C應(yīng)用程序要顯示字符串,需要使用Windows提供的API函數(shù),開(kāi)自己的窗口下面是一個(gè)最簡(jiǎn)單的,顯示“Hel

3、lo,World!的Windows C程序:#includeAPIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MessageBox(NULL,Hello,World!,第一個(gè) Windows C程序 ”,MB_OK|MB_ICONASTERISK);主函數(shù)的形參有四個(gè):1) Hinstance :接收程序運(yùn)行時(shí)當(dāng)前實(shí)例的句柄;2) HprivInstance :前一個(gè)實(shí)例的句柄;3) LpCmdLine :程序命令行指針;4) NcmdShow : 一個(gè)用來(lái)指定窗口

4、顯示方式的整數(shù)。這幾個(gè)參數(shù)的使用我們會(huì)在深入的學(xué)習(xí)中介紹的。顯示Hello,Word!字符串,我們使用了一個(gè) MessageBox函數(shù),這個(gè)函數(shù)會(huì)在屏幕上顯示 一個(gè)對(duì)話框,它的原型是:int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UNIT uType)四個(gè)參數(shù)分別是:1) HWnd :父窗口的句柄;2) LpText :要顯示字符串的指針;3) LpCaption :對(duì)話框標(biāo)題字符串的指針;4) UType :顯示在對(duì)話框上的小圖標(biāo)的類(lèi)型。使用這個(gè)函數(shù)要包含 windows.h頭文件。調(diào)試一下,怎么樣?窗口上彈出了一個(gè) 第一

5、個(gè) Windows C程序”對(duì)話框,上面有一行 字:Hello,World!。”世界真的很美好??! !深入編程:在C語(yǔ)言中,函數(shù)的聲明,如果沒(méi)有指明返回值類(lèi)型,缺省值為 void,這個(gè)程序的主 函數(shù)就沒(méi)有返回值。不過(guò),在 Windows編程時(shí),我們最好養(yǎng)成個(gè)好習(xí)慣,指明函數(shù)的返回 值類(lèi)型,因?yàn)樵?C+中,函數(shù)返回值類(lèi)型是不可以缺省的。而我們?cè)赪indows C編程時(shí),還是會(huì)用到C+的一些概念,這樣做,有利于以后深入地學(xué)習(xí)。規(guī)范一點(diǎn)的程序應(yīng)該是這樣的:#includeint APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,

6、LPSTR lpCmdLine,int nCmdShow)MessageBox(NULL,Hello,World!,第一個(gè) Windows C程序 ”,MB_OK|MB_ICONASTERISK);return 0;這里,我們聲明的類(lèi)型為 int型,并且返回一個(gè)值 0,這樣的函數(shù)就可以使用在復(fù)雜一 點(diǎn)的函數(shù)調(diào)用中了。在這一節(jié)中,我們有幾處都提到了句柄的概念,句柄和指針的概念不同,它是作為操作系統(tǒng)內(nèi)部索引表中的一個(gè)值來(lái)使用的,這樣可以防止應(yīng)用程序直接訪問(wèn)名對(duì)象的內(nèi)部結(jié)構(gòu), 體現(xiàn)了 Windows資源管理的優(yōu)越性。譬如說(shuō),一個(gè)窗口找開(kāi)之后,好對(duì)應(yīng)內(nèi)存中的一個(gè)內(nèi) 存塊,這個(gè)窗口所在的內(nèi)存快地址往往會(huì)

7、由操作系統(tǒng)做動(dòng)態(tài)的調(diào)整,但其卻不會(huì)隨之變化。 不過(guò),通過(guò)它可以訪問(wèn)這個(gè)窗口,所以在使用的時(shí)候,可以把它當(dāng)做指針一樣看待。二、獲取本地計(jì)算機(jī)的主機(jī)名和IP地址和C語(yǔ)言一樣,函數(shù)是 Windows C編程的最基本的單位。不過(guò), Windows C主要使用 API函數(shù),而網(wǎng)絡(luò)編程則主要使用Winsock提供的API函數(shù)。Winsock是90年代初,為了方便網(wǎng)絡(luò)編程,由 Microsoft聯(lián)合了其他幾家公司共同制定 的一套 WINDOWS下的網(wǎng)絡(luò)編程接口,它是通過(guò)C語(yǔ)言的動(dòng)態(tài)鏈接庫(kù)方式提供給用戶(hù)及軟件開(kāi)發(fā)者的,主要由 winsock.h頭文件和動(dòng)態(tài)鏈接庫(kù) winsock.dll組成,目前有兩個(gè)版本:

8、Winsock1.1 和 Winsock2.0。在Win32平臺(tái)上,訪問(wèn)眾多的基層網(wǎng)絡(luò)協(xié)議,Winsock是首選接口。用 Visual C+6.0 編譯 Windows C 程序,使用 Winsock API 函數(shù)時(shí),首先要把 wsock32.lib 添加到它的庫(kù)模塊中,否剛在鏈接的時(shí)候,會(huì)出現(xiàn) “error LNK2001錯(cuò)誤。添加wsock32.lib 的具體步驟是:打開(kāi)工程菜單,選擇設(shè)置,在彈出的 Project settings對(duì)話框中,點(diǎn)擊link選項(xiàng)卡,然后在對(duì)象/庫(kù)模塊文本本S中添加 wsock32.lib。最簡(jiǎn)單的網(wǎng)絡(luò)編程是獲取本機(jī)的主機(jī)名和IP地址,這個(gè)程序使用了 WSASt

9、art ()、WSAClenaup()、gethostname ()、gethostbyname ()四個(gè) winsock API 函數(shù),這四個(gè)函數(shù)的 功能和使用方法介紹如下:1. WSAStartup():【函數(shù)原型】int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);【使用說(shuō)明】每一個(gè)使用 winsock的應(yīng)用程序,都必須進(jìn)行 WSAStart函數(shù)調(diào)用,并且只有在調(diào)用成 功之后才能使用其它的 winsock網(wǎng)絡(luò)操作函數(shù)。WVersionRequired : 輸入表示欲使用的W insock版本,這是一個(gè)

10、 WORD類(lèi)型的整數(shù), 它的高位字節(jié)定義的是次版本號(hào),低位字節(jié)定義的是主版本號(hào)。LpWSAData :輸出是一個(gè)指向WSADATA資料的指針。這個(gè)資料我們一般不使用。返回值:調(diào)用成功返回 0;否則,返回出錯(cuò)信息。2. WSAClenaup():【函數(shù)原型】int PASCAL FAR WSACleanup(void);【使用說(shuō)明】winsock使用后,要調(diào)用W SACleanup函數(shù)關(guān)閉網(wǎng)絡(luò)設(shè)備,以便釋放其占用的資源。3. gethostname()【函數(shù)原型】int PASCAL FAR gethostname (char FAR * name, int namelen);【使用說(shuō)明】該函數(shù)

11、可以獲取本地主機(jī)的主機(jī)名,其中:name:輸出 用于指向所獲取的主機(jī)名的緩沖區(qū)的指針。Namelen:輸入 緩沖區(qū)的大小,以字節(jié)為單位。返回值:若無(wú)錯(cuò)誤,返回 0;否則,返回錯(cuò)誤代嗎。4. gethostbyname()【函數(shù)原型】struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name);【使用說(shuō)明】該函數(shù)可以從主機(jī)名數(shù)據(jù)庫(kù)中得到對(duì)應(yīng)的主機(jī)該函數(shù)唯一的參數(shù) name就是前面調(diào)用函數(shù) gethostname()得到的主機(jī)名。若無(wú)錯(cuò)誤,剛 返回一個(gè)指向hostent結(jié)構(gòu)的批針,它可以標(biāo)識(shí)一個(gè)主機(jī)”列表。Hostent結(jié)

12、構(gòu)定義如下:Struct hostent char FAR * h_name; char FAR FAR * h_aliases; short h_addrtype;char FAR FAR * h_addr_list;一 一其中:h_name: 輸入主機(jī)名地址(PC)。h_aliases: 一個(gè)由主機(jī)備用名組成的空中止數(shù)組。H_addrtype :返回地址的類(lèi)型,對(duì)于 Winsock,這個(gè)域總是 PF_INET。H_lenth :每個(gè)地址的長(zhǎng)度(字節(jié)數(shù)),對(duì)應(yīng)于 PF_INET域應(yīng)該為4。H_addr_list:應(yīng)該以空指針結(jié)尾的主機(jī)地址的列表,返回的地址是以網(wǎng)絡(luò)順序排列的。其中,h_add

13、r_list0存放的就是本地主機(jī)的 4個(gè)字節(jié)的IP地址,即:h_addr_list00.h_addr_list1.h_addr_list2.h_addr_list03一個(gè)簡(jiǎn)單的用消息框顯示主機(jī)名和IP地址的源程序如下:#includeint WSA_return;WSADATA WSAData;HOSTENT *host_entry;char host_name256;char host_address256;int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow

14、)WSA_return=WSAStartup(0x0101,&WSAData);if(WSA_return=0) .gethostname(host_name,256);host_entry=gethostbyname(host_name);if(host_entry!=0)wsprintf(host_address,%d.%d.%d.%d”, (host_entry-h_addr_list00&0x00ff), (host_entry-h_addr_list01&0x00ff), (host_entry-h_addr_list02&0x00ff), (host_entry-h_addr_li

15、st03&0x00ff);MessageBox(NULL,host_address,host_name,MB_OK);一一一WSACleanup();return 0;深入編程:前面顯示IP地址的時(shí)候,我們使用的是消息框,規(guī)范一點(diǎn)的編程應(yīng)該使用對(duì)話框,如何編輯一個(gè)對(duì)話框,很多書(shū)中都有介紹,編輯的對(duì)話框可參考圖5的運(yùn)行界面。頭文件Get_IP.h如下:BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);這個(gè)程序只使用了一個(gè)對(duì)話框過(guò)程,一般把這個(gè)過(guò)程的聲明放在頭文件中。源程序Get_

16、IP.c:#include#includeGet_IP.h#includeresource.h /這個(gè)頭文件在創(chuàng)建資源的時(shí)候會(huì)自動(dòng)生成,/并會(huì)在插入資源時(shí)自動(dòng)生成控件標(biāo)識(shí)號(hào).int WSA_return;WSADATA WSAData;HOSTENT *host_entry;char host_name256;char host_address256;int APIENTRWinMain(HINSTANCEInstance,HINSTANCEhPrevInstance,LPSTR lpCmdLine,int nCmdShow)WSA_return=WSAStartup(0x0101,&WSAD

17、ata);if(WSA_return=0).gethostname(host_name,256);host_entry=gethostbyname(host_name);if(host_entry!=0)wsprintf(host_address,%d.%d.%d.%d”,(host_entry-h_addr_list00&0x00ff),(host_entry-h_addr_list01&0x00ff),(host_entry-h_addr_list02&0x00ff), (host_entry-h_addr_list03&0x00ff);-WSACleanup();DialogBox(hI

18、nstance,DIALOG1,NULL,(DLGPROC)Hostname_ipDlgPro);return 0;BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam)switch(message)case WM_INITDIALOG: return(TRUE);case WM_COMMAND:if(LOWORD(wParam)=IDOK)SetDlgItemText(hDlg,IDC_EDIT1,host_name);SetDlgItemText(hDlg,IDC_EDIT2,

19、host_address);SetDlgItemText(hDlg,IDCANCEL,”確定)if(LOWORD(wParam)=IDCANCEL) EndDialog(hDlg,TRUE);return(TRUE);break;return(FALSE);三、利用 VisualC+6.0編譯 Windows C程序利用Visual C+6.0編譯 Windows C程序一般要經(jīng)過(guò)以下四個(gè)步驟:新建項(xiàng)目、添加代 碼、添加資源和編譯鏈接。下面我們簡(jiǎn)單地介紹一下程序上面介紹的規(guī)范的獲取本機(jī)的主機(jī) 名和IP地址程序的編譯過(guò)程:(一)新建項(xiàng)目1 .啟動(dòng)MicrosoftVisualC+,然后在【文件】

20、菜單中先擇【新建】命令,彈出如圖 1所 示的【新建】對(duì)話框:2 .在【新建】對(duì)話框中,系統(tǒng)打開(kāi)的是默認(rèn)的【工程】選項(xiàng)卡,【工程】選項(xiàng)卡左側(cè)的列表框中有多種建立工程的方式,我們選中“Win32 Application選項(xiàng)。3 .在【位置】文本框中輸入新建工程的路徑(例如:),在【工程】文本框中輸入工程名稱(chēng)(例如:Get_IP)。4 .選中【平臺(tái)】列表框中的 Win32復(fù)選框,然后單擊【確定】按鈕。5 .在隨后的對(duì)話框中,都選擇默認(rèn)設(shè)置,完成后,進(jìn)入圖 2示界面:精品文檔L)(Giobalsj道|田。幫H書(shū)RWorkspace GeciP1:1jlL上m、說(shuō)評(píng)二調(diào)詩(shī)、/登安文件1 ;宣在二七2 ;

21、君熊/ “1Ready|4 0 GetIP tils- LJ Source Filet 口 Header Files fi R&gourcc Files-II (AH qlobzt mcmbtiTE 司巾W用 tncmb心f北Create New Class. j,IJj方 GMasV| 囿 FileVicw圖2(二)添加代碼在VisualC+6.0中,源代碼一般存放在源代碼文件和頭文件中,往項(xiàng)目中添加源代碼 是非常方便的,為項(xiàng)目新建一個(gè)源代碼文件一般要按下述方法操作:1 .選擇【工程】|【添加工程】【新建】選項(xiàng),彈出圖 3所示【新建】對(duì)話框:2 .在對(duì)話框的【文件】選項(xiàng)卡中,左側(cè)的列表框選中

22、“C+ Source File選項(xiàng),右側(cè)選中【添加工程】復(fù)選框,并在【文件】文本框中輸入源文件名(例如:Get_IP.c)。3 .單擊【確定】按鈕,【新建】對(duì)話框?qū)⒈婚],用戶(hù)就可以在新建的Get_IP.c中輸入程序的源代碼了。4 .添加頭文件Get_IP.h的方法和上面所述過(guò)程一樣,只是在【文件】選項(xiàng)卡中,左 側(cè)的列表框要先中 “C/C+ Header File選項(xiàng)。在【文件】文本框中輸入頭文件名(例如: Get_IP.h)。(三)添加資源5 添加資源前,必須在項(xiàng)目中先添加一個(gè)資源文件,然后可利用Visual C+6.0提供的資源編輯器為項(xiàng)目新建一個(gè)資源,具體步驟如下:1 .選擇【工程】|【添加工程】【新建】選項(xiàng),彈出圖 3所示【新建】對(duì)話框。2 .在對(duì)話框的【文件】選項(xiàng)卡中,左側(cè)的列表框選中“Rsource Script選項(xiàng),右側(cè)選中【添加工程】復(fù)選框,并在【文

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論