




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Windows編程基礎東軟人才實訓中心Copyright2010ByNeusoftGroup.Allrightsreserved本課程旨在向學員介紹:1)網絡編程基礎知識2)使用Socket編程時間:學時3教學方法:講授+課上練習+課下作業(yè)第十章Windows網絡編程基礎計算機網絡概述計算機網絡模式TCP/IP協議Socket基礎套接字數據結構字節(jié)順序網絡基本知識計算機網絡概述計算機網絡定義:把分布在不同地點的具有獨立操作系統的計算機,利用通信線路物理地互連起來,按照網絡協議相互通信,以共享軟件、硬件和數據資源。其他外設打印機對等網絡模式在對等網絡模式中,相連的機器之間彼此處于同等地位,沒有主從之分故又稱為對等網絡(PeertoPeernetwork)。它們能夠相互共享資源,每臺計算機都能以同樣方式作用于對方。客戶機/服務器網絡模式客戶機/服務器網絡是一種基于服務器的網絡,與對等網絡相比,基于服務器的網絡提供了更好的運行性能并且可靠性也有所提高。共享數據全部都集中存放在服務器上??蛻魴C/服務器的一個典型應用就是數據庫的應用計算機網絡模式為了實現通信,需要分別編寫客戶端和服務器端的程序首先服務器啟動服務程序,等待客戶的服務請求。用戶觸發(fā),客戶端運行客戶程序客戶進程與服務器進程通信,傳送數據(請求-應答)客戶機/服務器網絡模式客戶機客戶機服務器請求應答請求應答TCP/IP協議Windows的網絡通信是建立在TCP/IP協議的基礎上TCP/IP協議族包括一系列構成互聯網基礎結構的網絡協議TCP/IP字面上代表兩個重要的協議TCP:傳輸控制協議IP:網際協議TCP/IP模型與OSI模型應用層表示層傳輸層網絡層數據鏈路層物理層會話層應用層傳輸層互聯層網絡接口層OSITCP/IP數據包的封裝-TCP/IP模型應用層傳輸層互聯層主機至網絡層應用程序HTTP協議TCP協議IP協議網卡驅動以太網首部IP首部TCP首部HTTP首部用戶數據以太網尾部IP首部TCP首部HTTP首部用戶數據TCP首部HTTP首部用戶數據HTTP首部用戶數據用戶數據使用協議封裝的數據包套接字概念及位置套接字是一種網絡編程接口,它可以理解為計算機與網絡應用程序之間的接口,Windows的網絡通信是建立在TCP/IP協議的基礎上主機至網絡層以太網令牌環(huán)幀中繼ATM...互聯層IPARPICMPIGMP傳輸層TCPUDP應用層套接字Sockets套接字是網絡通信的端點在網絡中,主機H1上的一個套接字端點(endpoint)可以和主機H2上的另一個套接字端點進行通信IP地址和端口號可以唯一確定一個套接字IP地址和端口IP地址:IP網絡中每臺主機都必須與一個惟一的IP地址IP地址是一個邏輯地址端口:端口號用以區(qū)別不同的應用,RFC1700規(guī)定了由IANA(因特網已分配數值權威機構)定義的端口列表,端口號分三段:周知端口:0~1023,由IANA分配和控制,對普通用戶不可用經注冊的端口:1024~49151,不受IANA控制,但由IANA登記并提供它們的使用情況清單動態(tài)或私用端口:49152~65535,IANA不管的端口,也稱臨時端口.理論上來說,我們編程能使用的端口值為1024~65535,周知端口的使用需要超級用戶(root)權限Socket分類流式套接口(SOCK_STREAM)提供面向連接、可靠的數據傳輸服務,數據無差錯、無重復的發(fā)送,且按發(fā)送順序接收。流式套接字是基于TCP協議實現的.數據報式套接字(SOCK_DGRAM)提供無連接服務。數據包以獨立包形式發(fā)送,不提供無差錯保證,數據可能丟失或重復原始套接字(SOCK_RAW)本課程旨在向學員介紹:1)網絡編程基礎知識2)使用Socket編程時間:學時3教學方法:講授+課上練習+課下作業(yè)第十章Windows網絡編程基礎客戶機/服務器模式在操作過程中采取的是主動請求的方式。首先服務器方要先啟動,并根據請求提供相應的服務回顧C/S模式客戶機客戶機服務器請求應答請求應答客戶/服務器通信過程及函數(TCP)服務器socket()bind()listen()accept()recv()send()close()socket()connect()send()recv()close()阻塞,等待客戶數據處理服務請求建立連接請求數據應答數據客戶端WSAStartup()WSACleanup()WSAStartup()WSACleanup()SOCK_STREAMSOCK_STREAMWSAStartup函數利用套接字編程時,首先需加載套接字庫,通過WSAStartup函數實現,該函數有兩個功能功能1:加載套接字庫功能2:進行套接字庫的版本IntWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);wVersionRequested:用來指定準備加載Winsock庫的版本.高位字節(jié)指定所需要的WinSock庫的副版本,低位字節(jié)則是主版本。lpWSAData:這是一個返回值,指向WSADATA結構的指針。WSADATA結構定義typedefstructWSAData{WORDwVersion;//winsock版本WORDwHighVersion;//高位版本charszDescription[WSADESCRIPTION_LEN+1];//未使用charszSystemStatus[WSASYS_STATUS_LEN+1];//未使用unsignedshortiMaxSockets;//最多可打開socket包數unsignedshortiMaxUdpDg;//數據報最大長度charFAR*lpVendorInfo;//廠商信息}WSADATA,*LPWSADATA;socket函數SOCKETsocket(intaf,inttype,intprotocol);af:使用TCP/IP協議,該參數使用AF_INETtype:SOCK_STREAM:指定產生流式套接字SOCK_DGRAM:指定產生數據報套接字SOCK_RAM:原始套接口Ipv4protocol:協議選擇,如果該參數為0,則系統會根據地址格式和套接字類別自動選擇一個合適的協議如果成功,返回一個SOCKET類型的套接字描述符,如果失敗,返回INVALID_SOCKET實例代碼#include"winsock2.h"voidmain(){WSADATAwsaData;WSAStartup(MAKEWORD(1,1),&wsaData);SOCKETsock=socket(AF_INET,SOCK_STREAM,0);...}bind函數創(chuàng)建了套接字之后,需要將該套接字綁定到本地的某個地址和端口上,這需要通過bind函數實現intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);這個函數接收三個參數:第一個參數(s)指定要綁定的套接字第二個參數name指定該套接字的本地地址信息。第三個參數指定該地址結構的長度套接字的數據結構-1通用的套接口地址結構structsockaddr{unsignedshortsa_family;/*地址家族,AF_xxx*/
charsa_data[14];/*14字節(jié)協議地址*/};sa_family:套接字的協議族地址類型,例如對于通常的TCP/IP協議(IPv4),它的值是AF_INET;sa_data中存儲著具體的協議地址,不同的協議族有不同的地址格式,sockaddr是一個通用型的結構。sa_data的存儲內容往往是包含地址和端口信息,而僅使用一個變量,所以使用起來不太方便。sa_familysa_data214套接字的數據結構-2使用TCP/IP協議時,sockaddr結構的并列形式structsockaddr_in{shortintsin_family;/*通信類型*/unsignedshortintsin_port;/*端口,2bytes*/structin_addrsin_addr;/*Internet地址,4bytes*/unsignedcharsin_zero[8];/*填充的空白信息,這樣就保持整個結構與sockaddr結構的長度相同*/};其中,in_addr結構定義如下:struct
in_addr
{unsignedlong
s_addr
;}/*s_addr必須是網絡字節(jié)順序
Network
Byte
Order*/sin_familysin_portsin_addrsin_zero2482兩種結構的關系sockaddr只是一個抽象的概況形式,并不實用sockaddr_in更加結合了TCP/IP協議族的特點,易于使用,所以編程中常使用這個結構。但是:socket本身所封裝的API都是支持sockaddr結構的,所以填充sockaddr_in結構需要強制轉換成sockaddr結構,方可作為參數被socket的標準函數所使用。字節(jié)順序主機字節(jié)順序(HostByteOrder)低位在前,高位在后(little-endian)基于Intel芯片的機器采取這種存儲方式網絡字節(jié)順序(NetworkByteOrder)高位在前,低位在后(big-endian)sockaddr_in的變量成員(端口和地址)都必須使用網絡字節(jié)順序66A1A166主機字節(jié)順序網絡字節(jié)順序轉換字節(jié)順序的函數u_shorthtons(u_shorthostshort);u_shortntohs(u_shortnetshort);u_longhtonl(u_longhostlong);u_longntohl(u_longnetlong);h:hostbyteordern:networkbytorder前兩個常用來轉換端口的表示方式請注意:盡量使用這些函數轉換,而不要自己根據機器而手工轉換,因為那樣會使得程序沒有移植性!將IP地址轉換為網絡字節(jié)順序unsignedlonginet_addr(constcharFAR*cp);轉換IP地址到IN_ADDR結構地址,例如將“0”0A00A8C0charFAR*inet_ntoa(structin_addrin);轉換IN_ADDR結構地址到IP地址,例如將0A00A8C0轉化為“0”實例代碼#include"winsock2.h"voidmain(){//加載套接字//創(chuàng)建socket
SOCKADDR_INaddrSrc;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));}listen函數intlisten(SOCKETs,intbacklog);第一個參數為套接字描述符第二個參數為等待隊列的最大長度實例代碼:listen(sock,5);accept函數SOCKETaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen);第一個參數s為套接字描述符,該套接字已經通過listen函數將其設置為監(jiān)聽狀態(tài)第二個參數addr為是一個指向緩沖區(qū)的指針,該緩沖區(qū)用來接收連接實體的地址。第三個參數addrlen是一個返回值,指向一個整形指針,返回包含地址信息的長度實例代碼//socket,bind,listen相關處理
intlen=sizeof(SOCKADDR_IN);SOCKADDR_INaddrClient;SOCKETsockClient;SOCKETnumSock;intindex=0;charbuf[120];
sockClient=accept(sock,(SOCKADDR*)&addrClient,&len);if(INVALID_SOCKET!=sockClient){
numSock=sockClient;}send/recv函數intsend(SOCKETs,constcharFAR*buff,intlen,intflags);第一個參數s為已建立連接的套接字第二個參數buff指向一個緩沖區(qū)。第三個參數len是緩沖區(qū)的長度第四個參數設定的值將影響函數的行為,通常設置為0intrecv(SOCKETs,charFAR*buf,intlen,intflags);第一個參數是建立連接之后準備接收數據的套接字第二個參數指向一個緩沖區(qū)的指針,用于保存接收的數據第三個參數為緩沖區(qū)的長度第四個參數為與send類似實例代碼//…
sockClient=accept(sock,(SOCKADDR*)&addrClient,&len);
numSock=sockClient;
strcpy(buf,"hellotheworld");send(numSock,buf,strlen(buf)+1,0);close函數intclosesocket(SOCKET);關閉socket客戶端相關函數-connectintconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);第一個參數s是即將在其上建立連接的套接字第二個參數name設定連接服務器端的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資項目可行性研究與項目評估
- 農業(yè)觀光生態(tài)園
- 三農產品物流配送手冊
- 綠色農產品生產技術推廣與應用實踐方案
- 車聯網及大數據應用
- 電商行業(yè)直播帶貨模式創(chuàng)新與發(fā)展方案
- 校園廣播系統投標方案
- 針對公司運營挑戰(zhàn)的對策報告
- 電力設施節(jié)能減排操作規(guī)程
- 三農村公共服務設施信息化管理方案
- 作業(yè)層隊伍建設重點業(yè)務課件
- DB31T 685-2019 養(yǎng)老機構設施與服務要求
- 二年級下冊美術教案-第5課 美麗的花園|嶺南版
- 人類進化史精品課件
- 魯濱遜漂流記讀后感PPT
- 總包單位向門窗單位移交門窗安裝工程工作面交接單
- 設備供貨安裝方案(通用版)
- 公開招聘社區(qū)居委專職工作人員考試筆試、面試題集及相關知識(11套試題含答案)
- 《植物生理學》課件第三章+植物的光合作用
- 中國藥膳理論與實踐-藥膳基本理論和技能
- 華東師大版七年級初一數學下冊全套試卷(單元、期中、期末)
評論
0/150
提交評論