版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1Windows編程基礎(chǔ)編程基礎(chǔ)東軟人才實(shí)訓(xùn)中心Copyright 2010 By Neusoft Group. All rights reserved2本課程旨在向?qū)W員介紹:本課程旨在向?qū)W員介紹:1)網(wǎng)絡(luò)編程基礎(chǔ)知識(shí))網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)2)使用)使用Socket編程編程時(shí)間:學(xué)時(shí)時(shí)間:學(xué)時(shí)3教學(xué)方法:講授教學(xué)方法:講授+課上課上練習(xí)練習(xí)+課下作業(yè)課下作業(yè)第十章第十章 Windows網(wǎng)絡(luò)編程基礎(chǔ)網(wǎng)絡(luò)編程基礎(chǔ)3計(jì)算機(jī)網(wǎng)絡(luò)概述計(jì)算機(jī)網(wǎng)絡(luò)模式TCP/IP協(xié)議Socket基礎(chǔ)套接字?jǐn)?shù)據(jù)結(jié)構(gòu)字節(jié)順序網(wǎng)絡(luò)基本知識(shí)網(wǎng)絡(luò)基本知識(shí)4計(jì)算機(jī)網(wǎng)絡(luò)概述計(jì)算機(jī)網(wǎng)絡(luò)概述計(jì)算機(jī)網(wǎng)絡(luò)定義:把分布在不同地點(diǎn)的具有獨(dú)立操作系統(tǒng)的計(jì)
2、算機(jī),利用通信線路物理地互連起來(lái),按照網(wǎng)絡(luò)協(xié)議相互通信,以共享軟件、硬件和數(shù)據(jù)資源。其他外設(shè)打印機(jī)5對(duì)等網(wǎng)絡(luò)模式在對(duì)等網(wǎng)絡(luò)模式中,相連的機(jī)器之間彼此處于同等地位,沒有主從之分故又稱為對(duì)等網(wǎng)絡(luò)(Peer to Peer network)。它們能夠相互共享資源,每臺(tái)計(jì)算機(jī)都能以同樣方式作用于對(duì)方??蛻魴C(jī)/服務(wù)器網(wǎng)絡(luò)模式客戶機(jī)服務(wù)器網(wǎng)絡(luò)是一種基于服務(wù)器的網(wǎng)絡(luò),與對(duì)等網(wǎng)絡(luò)相比,基于服務(wù)器的網(wǎng)絡(luò)提供了更好的運(yùn)行性能并且可靠性也有所提高。共享數(shù)據(jù)全部都集中存放在服務(wù)器上??蛻魴C(jī)服務(wù)器的一個(gè)典型應(yīng)用就是數(shù)據(jù)庫(kù)的應(yīng)用計(jì)算機(jī)網(wǎng)絡(luò)模式計(jì)算機(jī)網(wǎng)絡(luò)模式6為了實(shí)現(xiàn)通信,需要分別編寫客戶端和服務(wù)器端的程序首先服務(wù)器啟動(dòng)服
3、務(wù)程序,等待客戶的服務(wù)請(qǐng)求。用戶觸發(fā),客戶端運(yùn)行客戶程序客戶進(jìn)程與服務(wù)器進(jìn)程通信,傳送數(shù)據(jù)(請(qǐng)求-應(yīng)答)客戶機(jī)客戶機(jī)/服務(wù)器網(wǎng)絡(luò)模式服務(wù)器網(wǎng)絡(luò)模式客戶機(jī)客戶機(jī)服務(wù)器請(qǐng)求應(yīng)答請(qǐng)求應(yīng)答7TCP/IP協(xié)議協(xié)議Windows的網(wǎng)絡(luò)通信是建立在TCP/IP協(xié)議的基礎(chǔ)上TCP/IP協(xié)議族包括一系列構(gòu)成互聯(lián)網(wǎng)基礎(chǔ)結(jié)構(gòu)的網(wǎng)絡(luò)協(xié)議TCP/IP字面上代表兩個(gè)重要的協(xié)議TCP: 傳輸控制協(xié)議IP: 網(wǎng)際協(xié)議8TCP/IP模型與模型與OSI模型模型應(yīng)用層表示層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層會(huì)話層應(yīng)用層傳輸層互聯(lián)層網(wǎng)絡(luò)接口層OSITCP/IP9數(shù)據(jù)包的封裝數(shù)據(jù)包的封裝-TCP/IP模型模型應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層應(yīng)
4、用程序HTTP協(xié)議TCP協(xié)議IP協(xié)議網(wǎng)卡驅(qū)動(dòng)以太網(wǎng)首部 IP首部 TCP首部 HTTP首部 用戶數(shù)據(jù) 以太網(wǎng)尾部IP首部 TCP首部 HTTP首部 用戶數(shù)據(jù)TCP首部 HTTP首部 用戶數(shù)據(jù)HTTP首部 用戶數(shù)據(jù)用戶數(shù)據(jù)使用協(xié)議封裝的數(shù)據(jù)包10套接字概念及位置套接字概念及位置套接字是一種網(wǎng)絡(luò)編程接口,它可以理解為計(jì)算機(jī)與網(wǎng)絡(luò)應(yīng)用程序之間的接口,Windows的網(wǎng)絡(luò)通信是建立在TCP/IP協(xié)議的基礎(chǔ)上主機(jī)至網(wǎng)絡(luò)層以太網(wǎng)令牌環(huán)幀中繼ATM.互聯(lián)層IPARPICMPIGMP傳輸層TCPUDP應(yīng)用層套接字 Sockets11套接字是網(wǎng)絡(luò)通信的端點(diǎn)套接字是網(wǎng)絡(luò)通信的端點(diǎn)在網(wǎng)絡(luò)中,主機(jī)H1上的一個(gè)套接字端
5、點(diǎn)(endpoint)可以和主機(jī)H2上的另一個(gè)套接字端點(diǎn)進(jìn)行通信IP地址和端口號(hào)可以唯一確定一個(gè)套接字12IP地址和端口地址和端口IP地址:IP網(wǎng)絡(luò)中每臺(tái)主機(jī)都必須與一個(gè)惟一的IP地址IP地址是一個(gè)邏輯地址端口:端口號(hào)用以區(qū)別不同的應(yīng)用,RFC1700規(guī)定了由IANA(因特網(wǎng)已分配數(shù)值權(quán)威機(jī)構(gòu))定義的端口列表,端口號(hào)分三段:周知端口:01023,由IANA分配和控制,對(duì)普通用戶不可用經(jīng)注冊(cè)的端口:102449151,不受IANA控制,但由IANA登記并提供它們的使用情況清單動(dòng)態(tài)或私用端口:4915265535,IANA不管的端口,也稱臨時(shí)端口.理論上來(lái)說(shuō),我們編程能使用的端口值為1024655
6、35,周知端口的使用需要超級(jí)用戶(root)權(quán)限13Socket分類分類流式套接口( SOCK_STREAM)提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無(wú)差錯(cuò)、無(wú)重復(fù)的發(fā)送,且按發(fā)送順序接收。流式套接字是基于TCP協(xié)議實(shí)現(xiàn)的.數(shù)據(jù)報(bào)式套接字( SOCK_DGRAM )提供無(wú)連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式發(fā)送,不提供無(wú)差錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù)原始套接字( SOCK_RAW )14本課程旨在向?qū)W員介紹:本課程旨在向?qū)W員介紹:1)網(wǎng)絡(luò)編程基礎(chǔ)知識(shí))網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)2)使用)使用Socket編程編程時(shí)間:學(xué)時(shí)時(shí)間:學(xué)時(shí)3教學(xué)方法:講授教學(xué)方法:講授+課上課上練習(xí)練習(xí)+課下作業(yè)課下作業(yè)第十章第十章 Win
7、dows網(wǎng)絡(luò)編程基礎(chǔ)網(wǎng)絡(luò)編程基礎(chǔ)15客戶機(jī)/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)求的方式。首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)求提供相應(yīng)的服務(wù)回顧回顧C(jī)/S模式模式客戶機(jī)客戶機(jī)服務(wù)器請(qǐng)求應(yīng)答請(qǐng)求應(yīng)答16客戶客戶/服務(wù)器通信過(guò)程及函數(shù)服務(wù)器通信過(guò)程及函數(shù)(TCP)服務(wù)器socket()bind()listen()accept()recv()send()close()socket()connect()send()recv()close()阻塞,等待客戶數(shù)據(jù)處理服務(wù)請(qǐng)求建立連接建立連接請(qǐng)求數(shù)據(jù)請(qǐng)求數(shù)據(jù)應(yīng)答數(shù)據(jù)應(yīng)答數(shù)據(jù)客戶端WSAStartup()WSACleanup()WSAStartup()WSACle
8、anup()SOCK_STREAMSOCK_STREAM17WSAStartup函數(shù)函數(shù)利用套接字編程時(shí),首先需加載套接字庫(kù),通過(guò)WSAStartup函數(shù)實(shí)現(xiàn),該函數(shù)有兩個(gè)功能功能1:加載套接字庫(kù)功能2:進(jìn)行套接字庫(kù)的版本Int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );wVersionRequested:用來(lái)指定準(zhǔn)備加載Winsock庫(kù)的版本.高位字節(jié)指定所需要的WinSock庫(kù)的副版本,低位字節(jié)則是主版本。lpWSAData:這是一個(gè)返回值,指向WSADATA結(jié)構(gòu)的指針。18WSADATA結(jié)構(gòu)定義結(jié)構(gòu)定義typede
9、f struct WSADataWORD wVersion; /winsock版本W(wǎng)ORD wHighVersion; /高位版本char szDescription WSADESCRIPTION_LEN+1 ; /未使用char szSystemStatus WSASYS_STATUS_LEN+1 ; /未使用unsigned short iMaxSockets; /最多可打開socket包數(shù)unsigned short iMaxUdpDg; /數(shù)據(jù)報(bào)最大長(zhǎng)度char FAR* lpVendorInfo; /廠商信息WSADATA,*LPWSADATA;19socket函數(shù)函數(shù)SOCKET
10、socket( int af, int type, int protocol );af: 使用TCP/IP協(xié)議,該參數(shù)使用AF_INETtype:SOCK_STREAM: 指定產(chǎn)生流式套接字SOCK_DGRAM: 指定產(chǎn)生數(shù)據(jù)報(bào)套接字SOCK_RAM:原始套接口 Ipv4protocol:協(xié)議選擇,如果該參數(shù)為0,則系統(tǒng)會(huì)根據(jù)地址格式和套接字類別自動(dòng)選擇一個(gè)合適的協(xié)議如果成功,返回一個(gè)SOCKET類型的套接字描述符,如果失敗,返回INVALID_SOCKET20實(shí)例代碼實(shí)例代碼#include winsock2.hvoid main() WSADATA wsaData; WSAStartup(
11、 MAKEWORD(1, 1), &wsaData ); SOCKET sock = socket( AF_INET, SOCK_STREAM, 0 ); .21bind函數(shù)函數(shù)創(chuàng)建了套接字之后,需要將該套接字綁定到本地的某個(gè)地址和端口上,這需要通過(guò)bind函數(shù)實(shí)現(xiàn)int bind( SOCKET s, const struct sockaddr FAR *name, int namelen );這個(gè)函數(shù)接收三個(gè)參數(shù):第一個(gè)參數(shù)(s)指定要綁定的套接字第二個(gè)參數(shù)name指定該套接字的本地地址信息。第三個(gè)參數(shù)指定該地址結(jié)構(gòu)的長(zhǎng)度22套接字的數(shù)據(jù)結(jié)構(gòu)套接字的數(shù)據(jù)結(jié)構(gòu)-1通用的套接口地址結(jié)構(gòu)
12、struct sockaddr unsigned short sa_family; /* 地址家族, AF_xxx */ char sa_data14; /*14字節(jié)協(xié)議地址*/; sa_family:套接字的協(xié)議族地址類型,例如對(duì)于通常的TCP/IP協(xié)議(IPv4),它的值是AF_INET; sa_data中存儲(chǔ)著具體的協(xié)議地址,不同的協(xié)議族有不同的地址格式,sockaddr是一個(gè)通用型的結(jié)構(gòu)。sa_data的存儲(chǔ)內(nèi)容往往是包含地址和端口信息,而僅使用一個(gè)變量,所以使用起來(lái)不太方便。sa_familysa_data21423套接字的數(shù)據(jù)結(jié)構(gòu)套接字的數(shù)據(jù)結(jié)構(gòu)-2使用TCP/IP協(xié)議時(shí),sock
13、addr結(jié)構(gòu)的并列形式struct sockaddr_in short int sin_family; /* 通信類型 */ unsigned short int sin_port; /* 端口, 2 bytes*/ struct in_addr sin_addr; /* Internet 地址, 4 bytes */ unsigned char sin_zero8; /* 填充的空白信息, 這樣就保持整個(gè)結(jié)構(gòu)與sockaddr結(jié)構(gòu)的長(zhǎng)度相同*/ ; 其中, in_addr結(jié)構(gòu)定義如下:structin_addr unsigned longs_addr; /*s_addr必須是網(wǎng)絡(luò)字節(jié)順序Ne
14、tworkByteOrder */sin_familysin_portsin_addrsin_zero248224兩種結(jié)構(gòu)的關(guān)系兩種結(jié)構(gòu)的關(guān)系sockaddr只是一個(gè)抽象的概況形式,并不實(shí)用sockaddr_in更加結(jié)合了TCP/IP協(xié)議族的特點(diǎn),易于使用,所以編程中常使用這個(gè)結(jié)構(gòu)。但是:socket本身所封裝的API都是支持sockaddr結(jié)構(gòu)的,所以填充sockaddr_in結(jié)構(gòu)需要強(qiáng)制轉(zhuǎn)換成sockaddr結(jié)構(gòu),方可作為參數(shù)被socket的標(biāo)準(zhǔn)函數(shù)所使用。25字節(jié)順序字節(jié)順序主機(jī)字節(jié)順序(Host Byte Order)低位在前,高位在后(little-endian)基于Intel芯片的
15、機(jī)器采取這種存儲(chǔ)方式網(wǎng)絡(luò)字節(jié)順序(Network Byte Order)高位在前,低位在后(big-endian)sockaddr_in的變量成員(端口和地址)都必須使用網(wǎng)絡(luò)字節(jié)順序66A1A166主機(jī)字節(jié)順序網(wǎng)絡(luò)字節(jié)順序26轉(zhuǎn)換字節(jié)順序的函數(shù)轉(zhuǎn)換字節(jié)順序的函數(shù)u_short htons ( u_short hostshort );u_short ntohs( u_short netshort );u_long htonl( u_long hostlong );u_long ntohl(u_long netlong);h:host byte ordern:network byt order前兩
16、個(gè)常用來(lái)轉(zhuǎn)換端口的表示方式請(qǐng)注意:盡量使用這些函數(shù)轉(zhuǎn)換,而不要自己根據(jù)機(jī)器而手工轉(zhuǎn)換,因?yàn)槟菢訒?huì)使得程序沒有移植性!27將將IP地址轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序地址轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序unsigned long inet_addr ( const char FAR * cp );轉(zhuǎn)換IP地址到IN_ADDR結(jié)構(gòu)地址,例如將“0”0A00A8C0char FAR * inet_ntoa ( struct in_addr in );轉(zhuǎn)換IN_ADDR結(jié)構(gòu)地址到IP地址,例如將0A00A8C0轉(zhuǎn)化為“0”28實(shí)例代碼實(shí)例代碼#include winsock2.hvoi
17、d main() /加載套接字加載套接字 /創(chuàng)建創(chuàng)建socket SOCKADDR_IN addrSrc; addrSrc.sin_family = AF_INET; addrSrc.sin_port = htons(3000); addrSrc.sin_addr.S_un.S_addr = htonl( INADDR_ANY ); bind( sock, (SOCKADDR *)&addrSrc, sizeof(SOCKADDR) );29listen函數(shù)函數(shù)int listen( SOCKET s, int backlog );第一個(gè)參數(shù)為套接字描述符第二個(gè)參數(shù)為等待隊(duì)列的最大長(zhǎng)度
18、實(shí)例代碼:listen(sock, 5 );30accept函數(shù)函數(shù)SOCKET accept( SOCKET s,struct sockaddr FAR*addr, int FAR* addrlen );第一個(gè)參數(shù)s為套接字描述符,該套接字已經(jīng)通過(guò)listen函數(shù)將其設(shè)置為監(jiān)聽狀態(tài)第二個(gè)參數(shù)addr為是一個(gè)指向緩沖區(qū)的指針,該緩沖區(qū)用來(lái)接收連接實(shí)體的地址。第三個(gè)參數(shù)addrlen是一個(gè)返回值,指向一個(gè)整形指針,返回包含地址信息的長(zhǎng)度31實(shí)例代碼實(shí)例代碼 /socket, bind, listen相關(guān)處理相關(guān)處理 int len = sizeof( SOCKADDR_IN ); SOCKADD
19、R_IN addrClient; SOCKET sockClient; SOCKET numSock; int index = 0; char buf120; sockClient = accept(sock, (SOCKADDR*)&addrClient, &len ); if( INVALID_SOCKET != sockClient ) numSock = sockClient; 32send/recv函數(shù)函數(shù)int send( SOCKET s,const char FAR *buff, int len, int flags );第一個(gè)參數(shù)s為已建立連接的套接字第二個(gè)參
20、數(shù)buff指向一個(gè)緩沖區(qū)。第三個(gè)參數(shù)len是緩沖區(qū)的長(zhǎng)度第四個(gè)參數(shù)設(shè)定的值將影響函數(shù)的行為,通常設(shè)置為0int recv( SOCKET s, char FAR* buf, int len, int flags);第一個(gè)參數(shù)是建立連接之后準(zhǔn)備接收數(shù)據(jù)的套接字第二個(gè)參數(shù)指向一個(gè)緩沖區(qū)的指針,用于保存接收的數(shù)據(jù)第三個(gè)參數(shù)為緩沖區(qū)的長(zhǎng)度第四個(gè)參數(shù)為與send類似33實(shí)例代碼實(shí)例代碼 / sockClient = accept(sock, (SOCKADDR*)&addrClient, &len ); numSock= sockClient; strcpy( buf, hello the world); send(numSock, buf, strlen(buf) + 1, 0);34close函數(shù)函數(shù)int closesocket( SOCKET );關(guān)閉socket35客戶端相關(guān)函數(shù)客戶端相關(guān)函數(shù)-connectint connect( SOCKET s, const struct sockaddr FAR* name, int namelen );第一個(gè)參數(shù)s是即將在其上建立連接的套接字第二個(gè)參數(shù)name設(shè)定連接服務(wù)器端的地址信息第
溫馨提示
- 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é)
- 法學(xué)專業(yè)評(píng)估整改方案
- 海南省農(nóng)墾實(shí)驗(yàn)中學(xué)2024-2025學(xué)年高三上學(xué)期9月月考地理試題(含答案)
- 寧夏行政職業(yè)能力模擬9
- 2018年7月14日安徽省公務(wù)員考試面試真題
- 關(guān)于成立化工公司投資計(jì)劃書
- 2015年2月7日山西大同天鎮(zhèn)縣統(tǒng)計(jì)局調(diào)查監(jiān)測(cè)中心面試真題
- 河北省公務(wù)員面試模擬182
- 安徽行政職業(yè)能力模擬38
- 河南行政職業(yè)能力測(cè)驗(yàn)?zāi)M139
- 16.分式共19節(jié)集體備課
- 城市人員走失搜救方案
- 完整版成品及半成品保護(hù)措施
- 駐場(chǎng)工作人員管理辦法
- 管理培訓(xùn)教材-NPI新產(chǎn)品導(dǎo)入
- 視盤水腫治療及護(hù)理
- 質(zhì)量保證體系評(píng)價(jià)-評(píng)價(jià)表(ASES-ver.1.6)
- 消防安全-情系你我他
- 短視頻的拍攝與剪輯
- 【題型專項(xiàng)特訓(xùn)】三年級(jí)數(shù)學(xué)上冊(cè)第五單元倍的認(rèn)識(shí)專項(xiàng)訓(xùn)練-解答題(人教版含答案)
- 2023年甘肅省定西岷縣選聘村文書125人筆試參考題庫(kù)(共500題)答案詳解版
評(píng)論
0/150
提交評(píng)論