版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、,目錄,Winsock網絡編程實例分析,套接字概念機其編程原理,網絡編程概念,7.1 網絡編程本概念,7.1.1 網絡編程與進程通信 (1)進程與線程的基本概念 進程是處于運行過程中的程序實例,是操作系統(tǒng)調度和分配資源的基本單位。 一個進程實體由三部分構成。 程序代碼:規(guī)定進程所做的計算。 數據:計算的對象。 進程控制塊:操作系統(tǒng)用來管理進程的內核對象,也是系統(tǒng)用來存放關于進程的統(tǒng)計信息的地方。,從計算機網絡體系結構的角度來看,網絡應用進程處于網絡層次結構的最上層。 從功能上,可以將網絡應用程序分為兩部分: 專門負責網絡通信的模塊,它們與網絡協議棧相連接,借助網絡協議棧提供的服務完成網絡上數據
2、信息的交換。 面向用戶或者作其他處理的模塊,它們接收用戶的命令,或者對借助網絡傳輸過來的數據進行加工。 兩部分模塊相互配合來實現網絡應用程序功能。,(2)網絡應用進程在網絡體系結構中的位置,圖7-1 網絡應用程序在網絡體系結構中的位置,網間進程通信,是指網絡中不同主機中的應用進程之間的相互通信問題,必須解決以下問題: 網間進程的標識問題(不能只用進程號標識); 如何與網絡協議棧連接的問題(通過定義套接字網絡編程接口來解決); 多重協議識別問題(不同協議工作方式不同); 不同的通信服務的問題(要求不同,如文件傳輸要求可靠、無差錯、無亂序、無丟失,網絡聊天要求不高,可選TCP和UDP服務)。,(3
3、)實現網間進程通信必須解決的問題,圖7-2 TCP/IP協議族,1.2 因特網中網間進程的標識,7.1.2 因特網中網間進程的標識,(1)傳輸層在網絡通信中的地位,傳輸層在網絡通信中的地位,TCP/IP協議棧的特點是“兩頭大、中間小” 應用層有多個應用進程,使用不同應用層協議; 網絡接口層,有多種數據鏈路層協議,支持不同的物理網絡連接; 網絡層有IP協議,傳輸層有TCP和UDP協議。 按照OSI七層協議的描述,傳輸層與網絡層在功能上的最大區(qū)別,是傳輸層提供進程通信的能力。 TCP/IP協議提出了傳輸層協議端口(簡稱端口)的概念,成功地解決了通信進程的標識問題。,傳輸層是計算機網絡中,通信主機內
4、部進行獨立操作的第一層,是支持端到端的進程通信的關鍵的一層。,圖 7-3 基于TCP/IP協議棧的進程間的通信,傳輸層的作用,端口是TCP/IP協議族中,應用層進程與傳輸層協議實體間的通信接口。 在OSI七層協議描述中,將其稱為應用層進程與傳輸層協議實體間的服務訪問點。 應用層進程通過系統(tǒng)調用與某個傳輸層端口進行綁定,然后通過該接口接收或發(fā)送數據。 類似于文件描述符,每個端口都擁有一個叫作端口號的16位整數型標識符。 可以用端口標識通信的網絡應用程序。,(2)端口的概念,傳輸層TCP和UDP兩個協議是完全獨立的軟件模塊,因此各自的端口號也獨立。 如圖所示都可以提供65535個端口。 端口是操作
5、系統(tǒng)可分配的一種資源。,圖7-4 UDP與TCP的報文格式,UDP和TCP的端口,網絡進程通信前必須獲知對方的進程地址。 由于網絡應用程序大多采用C/S模式開發(fā),通信總是由客戶機發(fā)起,因此事先只需讓客戶機知道服務器的進程地址即可。 Internet中為客戶服務的眾所周知的服務有限。 TCP/IP協議采用了全局分配(靜態(tài)分配)和本地分配(動態(tài)分配)相結合的分配方法。 對于TCP或UDP,將它們的全部65535個端口號分為保留端口號和自由端口號兩部分。,(3)端口號的分配機制,表7-1 一些典型的應用層協議分配到的保留端口,保留端口,自由端口號,范圍是102465535,采用本地分配,又稱為動態(tài)分
6、配。 TCP或UDP端口的分配規(guī)則是: 端口0:不使用,或者作為特殊的使用; 端口1-255:保留給特定的服務,TCP和UDP均規(guī)定,小于256的端口號才能分配給網上著名的服務; 端口256-1023:保留給其他的服務,如路由; 端口1024-4999:可用作任意客戶的端口; 端口5000-65535:可用作用戶的服務器端口。,自由端口,在這樣的端口分配機制下,客戶進程C與服務器進程S第一次通信的情景。,圖 7-5 客戶與服務器的第一次通信,通信的情景示例,在因特網中,用一個三元組可以在全局中唯一地標識一個應用層進程: 應用層進程地址 =(傳輸層協議,主機的IP地址,傳輸層的端口號) 這個三元
7、組叫做一個半相關(half-association),它標識了因特網中,進程間通信的一個端點,也把它稱為進程的網絡地址。,(4)網絡中進程通信的標識,一個完整的網間通信需要一個五元組在全局中唯一地來標識: (傳輸層協議,本地機IP地址,本地機傳輸層端口,遠地機IP地址,遠地機傳輸層端口) 這個五元組稱為一個全相關,即兩個協議相同的半相關才能組合成一個合適的全相關,或完全指定一對網間通信的進程。,圖7-6 TCP/UDP的通信系統(tǒng)模型,從TCP角度來看,整個Internet是一個通信系統(tǒng),能夠接收和傳遞消息,而不會改變和干預消息的內容。,7.1.3 客戶/服務器模型,網絡應用進程通信時,普遍采用
8、客戶/服務器交互模式,簡稱C/S模式。 這是因特網上應用程序最常用的通信模式。 C/S模式的建立基于以下兩點: 客戶與服務器之間的關系是非對等的,服務器提供資源,客戶機請求共享這些資源; 網間進程通信是完全異步的,互相通信的進程間既不存在父子關系,又沒有共享內存緩沖區(qū),需要一種機制為二者間的數據交換提供同步.,C/S模式過程中服務器處于被動服務的地位。 服務器要先啟動,并根據客戶請求提供相應服務: 打開一通信通道,并告知服務器所在的主機,并愿意在某一公認的地址上(熟知知端口,如FTP為21)接收客戶請求。 等待客戶的請求到達該端口。 服務器接收到服務請求,處理該請求并發(fā)送應答信號。為了能并發(fā)地
9、接收多個客戶的服務請求,要激活一個新進程或新線程來處理這個客戶請求(如UNIX系統(tǒng)中用fork、exec)。服務完成后,關閉此新進程與客戶的通信鏈路并終止. 返回第二步,等待并處理另一客戶請求。 在特定的情況下,關閉服務器。,(1)客戶/服務器模式的工作過程,客戶端的工作過程 客戶方采取的是主動請求方式: 打開一通信通道,并連接到服務器所在主機的特定監(jiān)聽端口。 向服務器發(fā)送請求報文,等待并接收應答;繼續(xù)提出請求,與服務器的會話按照應用協議進行。 請求結束后,關閉通信通道并終止。,客戶與服務器的通信過程: 通信之前,服務器應先行啟動,并通知它的下層協議棧做好接收客戶請求的準備,然后被動地等待客戶
10、的通信請求,稱服務器處于監(jiān)聽狀態(tài)。 一般是先由客戶向服務器發(fā)送請求,服務器向客戶返回應答??蛻綦S時可以主動啟動通信,向服務器發(fā)出連接請求,服務器接收這個請求,建立了二者的通信關系。 客戶與服務器的通信關系一旦建立,客戶和服務器都可發(fā)送和接收信息。,(2) 客戶機與服務器的通信過程,圖7-7 電插座與電話插座的作用,7.2.1 套接口(Socket),7.2 套接口的概念極其編程原理,套接字是對網絡中不同主機上應用進程之間進行雙向通信的端點的抽象。 一個套接字就是網絡上進程通信的一端,提供了應用層進程利用網絡協議棧交換數據的機制。 套接字是網絡應用程序通過網絡協議棧進行通信時所使用的接口,即應用
11、程序與協議棧軟件之間的接口。,套接字概念,圖7-8 應用進程、套接口、網絡協議棧及操作系統(tǒng)的關系,兩個應用進程只要分別連接到自己的套接字,就可以通過網絡痛惜,不用去管復雜的網絡結構及數據傳輸過程。,應用進程、套接口、網絡協議棧及操作系統(tǒng)的關系,(1) 數據報套接字(Datagram SOCKET),7.2.2套接口的分類,圖7-9 數據報套接字,(2) 流式套接字,7.2.2套接口的分類,圖7-10 流式套接字,(3) 原始式套接字(RAW SOCKET) 原始式套接字允許對較低層次的協議(如IP、ICMP)直接訪問,用于檢驗新協議的實現。,(1)面向連接的套接字編程的工作過程 面向連接的通信
12、方式基于TCP,必須借助流式套接字來編程,應用服務器分為服務器端和客戶端,雙方是不對稱的,需要分別編程。 雙方首先要創(chuàng)建并安裝套接字,做好準備; 建立連接,采用三次握手的方式; 數據交換,稱為客戶機與服務器的會話期,會話的內容必須遵守一定的格式和順序; 釋放連接。 下面介紹面向連接的服務器和客戶端的編程步驟.,7.2.3 套接口編程原理,圖7-12 C/S模式的數據報套接字的編程模型,(2)無連接的套接字編程的工作過程,應用雙方不是對等的:服務器要先啟動,被動等待訪問,要經過創(chuàng)建套接字、綁定套接字、發(fā)送/接收數據、關閉套接字4個階段,將套接字綁定到眾所周知的端口上; 客戶機套接字使用動態(tài)分配的
13、自由端口上,不需要進行綁定; 客戶機主動請求服務,并在數據報中攜帶雙方的地址; 服務器可以接受多個客戶端的數據。,C/S模式無連接套接字特點,1創(chuàng)建套接字SOCKET() 創(chuàng)建一個套接字,并返回一個整型描述符: int SOCKET( int Protofamily, int Type, int Protocol); 2綁定套接字到指定的地址 BIND() int BIND( int Sockfd, struct sockaddr* My_addr, int Addrlen); 3啟動監(jiān)聽Listen() int LISTEN( int Sockfd, int Queuesize); 4接收連
14、接請求ACCEPT() int ACCEPT(int Sockfd, struct sockaddr* Addr, int* addrlen);,(3)UNIX套接字接口函數,5請求建立連接CONNECT() int CONNECT( int Sockfd, struct sockaddr* Service_addr, int Addrlen); 6讀/寫套接字READ()和WRITE() int READ( int sockfd, void* buffer, int len ) int WRITE( int sockfd, void* buffer, int len ) 7發(fā)送 SEND()
15、 和接收 RECV() int SEND( int sockfd, char* buf, int len, int flags ); int RECV( int sockfd, char* buf, int len, int flags ); 8關閉套接字CLOSE() int CLOSE( int sockfd );,(3)UNIX套接字接口函數,9發(fā)送數據報SENDTO() int SENDTO( int sockfd, const void* msg, int len, unsigned int flags, struct sockaddr* to, int tolen); 10、接收數
16、據報 RECVFROM() int RECVFROM( int sockfd, void* buf, int len, unsigned int flags, struct sockaddr* from, int* fromlen ),(3)UNIX套接字接口函數,(4)Windows Sockets規(guī)范,圖7-13 網絡應用進程利用Windock進行通信,7.3Winsock網絡編程實例分析,7.3.1設計實例,7.3.2Winsock基本函數介紹及應用,聊天程序通信流程,1SAStartup()啟動函數 2WSACleanup()注銷函數,Winsock 初始化,WSADATA wsaDa
17、ta; / 用來返回Winsock 實現的細節(jié)信息 /調用初始化函數,初始化socket if(WSAStartup(MAKEWORD(2,2), /至此,可以確認初始化成功,Winsock.DLL可用。,1創(chuàng)建套接口SOCKET() SOCKET socket (int af, int type, int protocol); 2將套接口綁定到指定的網絡地址BIND() int bind( SOCKET s, const struct sockaddr * name, int namelen);,Winsock基本函數及應用,SOCKET RecvSocket; / 定義了一個SOCKET
18、類型的變量。 RecvSocket=socket(AF_INET,SOCK_DGRAM,0); / 創(chuàng)建數據報套接字。,int port=8888; /設置服務器、客戶的地址和端口 struct sockaddr_in recvAddr; / 定義一個Sockaddr_in型的結構實例變量。 recvAddr.sin_family = AF_INET; /指定通信域是Internet。 recvAddr.sin_addr.S_un.S_addr=INADDR_ANY; / 指定IP地址 recvAddr.sin_port = htons(port); / 指定端口,將端口號轉換為網絡字節(jié)順序。
19、 if(bind(RecvSocket,(LPSOCKADDR),Winsock基本函數及應用,3從數據報套接字接收數據RECVFORM() int recvfrom( SOCKET s, char * buf, int len, int flags, struct sockaddr* from, int* fromlen); 4按照指定目的地向數據報套接字發(fā)送數據SENDTO() int sendto( SOCKET s, char * buf, int len, int flags, struct sockaddr * to, int tolen); 5關閉套接字CLOSESOCKET() int closesocket( SOCKET s);,42,7.3.3客戶端核心程序,發(fā)送和接收的的數據包的定義 struct MEG int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年房地產市場中的臨時推廣活動有效性分析
- 2026年端午節(jié)的民族特色清明節(jié)的緬懷與回憶
- 2025年陜西白水人事考試及答案
- 2025年智聯招聘事業(yè)單位要考試及答案
- 2025年社工人事考試及答案
- 2025年扶余事業(yè)編歷年考試真題及答案
- 2025年廈門市藥學類事業(yè)編考試及答案
- 2025年淮安盱眙衛(wèi)生事業(yè)編考試及答案
- 2026年圖書館信息素養(yǎng)培訓
- 湖北某國有人才集團招聘外包工作人員3人筆試備考試題及答案解析
- 中西醫(yī)結合診治妊娠胚物殘留專家共識(2024年版)
- 2025-2026學年北京市海淀區(qū)初二(上期)期末物理試卷(含答案)
- (正式版)DB51∕T 2732-2025 《用材林培育技術規(guī)程 杉木》
- 美容院2025年度工作總結與2026年發(fā)展規(guī)劃
- 癲癇患者的護理研究進展
- 2025年12月福建廈門市鷺江創(chuàng)新實驗室管理序列崗位招聘8人備考題庫必考題
- 高一生物上冊期末考試題庫含解析及答案
- 收購商場協議書范本
- 干熱復合事件對北半球植被的影響及響應機制研究
- 2025年四川單招護理試題及答案
- 鋼梁現場安裝施工質量通病、原因分析及應對措施
評論
0/150
提交評論