




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3講流套接字編程Windows網絡編程基礎內容提要1.TCP:傳輸控制協議2.流式套接字編程模型3.基本函數4.程序舉例5.程序運行過程分析1.TCP:傳輸控制協議運輸層協議TCPTranspotControlProtocol,傳輸控制協議面向連接提供高可靠性服務,用于一次傳輸要交換大量報文的情形。增加許多開銷:確認、流量控制、計時器以及連接管理等。TCP的正常的連接建立和關閉SYN,SEQ=x客戶進程服務器進程LISTEN(被動打開)(主動打開)SYN_SENTSYN_RCVDESTABLISHEDESTABLISHED(主動關閉)FIN_WAIT_1CLOSE_WAIT(被動關閉)FIN_WAIT_2LAST_ACKTIME_WAITCLOSED(全雙工數據傳送階段)SYN,ACK,SEQ=y,ACK=x+1ACK,SEQ=x+1,ACK=y+1FIN,SEQ=uACK,SEQ=v,ACK=u+1FIN,ACK,SEQ=v,ACK=u+1ACK,SEQ=u+1,ACK=v+1TIME_WAITCLOSE_WAITSYN_RCVDESTABLISHEDTCP
的
有
限
狀
態
機CLOSEDESTABLISHEDLISTENCLOSE_WAITFIN_WAIT_1SYN_RCVDFIN_WAIT_2CLOSINGTIME_WAITSYN_SENTLAST_ACK主動打開被動打開被動關閉主動關閉起點被動打開主動打開發送SYN同時打開收到SYN,發送SYN,ACK收到ACK數據傳送階段
關閉發送FIN
關閉發送FIN
關閉發送FIN收到RST
收到SYN發送SYN,ACK
關閉或超時收到ACK
收到SYN,ACK發送ACK收到ACK收到ACK收到FIN發送ACK收到FIN,ACK
發送ACK收到FIN發送ACK同時關閉收到FIN發送ACK發送SYN定時經過兩倍報文段壽命后關閉1.TCP:傳輸控制協議2.流式套接字編程模型1).流套接字編程模型基礎傳輸方式客戶機/服務器方式特點面向連接過程
服務器進程和客戶端進程在通信前必須創建各自的套接字,建立連接,然后對相應的套接字進行“讀”、“寫”操作,實現數據的傳輸。2).流套接字編程的適用場合適用場合:大數據量的數據傳輸應用可靠性要求高的傳輸應用3).通信過程服務器通信過程:①socket初始化;②創建套接字,指定使用TCP(可靠的傳輸服務)進行通信;③指定本地地址和通信端口;④等待客戶端的連接請求;⑤進行數據傳輸;⑥關閉套接字;⑦結束對windowssocketsdll的使用。客戶端通信過程:①socket初始化;②創建套接字,指定使用TCP(可靠的傳輸服務)進行通信;③指定服務器地址和通信端口;④向服務器發送連接請求;⑤進行數據傳輸;⑥關閉套接字;⑦結束對windowssocketsdll的使用。3).通信過程4).客戶-服務器交互模型socket(),建立流式套接字,返回套接字標識s
bind(),使套接字s與本地地址相連listen(),在套接字s上偵聽連接請求accept(),準備接收客戶連接;accept返回,創建新套接字ns,原套接字s仍處于偵聽狀態;socket(),建立流式套接字,返回套接字標識s
connect(),s與服務器建立連接recv/send(),在ns上讀寫數據closesocket(),關閉s,通信結束closesocket(),關閉套接字nsclosesocket(),關閉套接字s,服務結束服務器客戶端recv/send(),在s上讀寫數據問題:server如何處理與多個client建立連接?ListeningserverTCPServerchildServerchildclientclientTCPTCPconnectionconnectionconnectionconnectionconnectionconnection5).流式套接字服務器工作原理1.TCP:傳輸控制協議2.流式套接字編程模型3.基本函數①創建套接字——socket函數定義:SOCKETsocket(intaf,inttype,intprotocol);輸入參數:
af:指定網絡地址類型,一般取AF_INET,表示該套接字在Internet域中進行通信;
type:指定套接字類型,這里取SOCK_STREAM,表創建的套接字是流套接字;
protocol:指定網絡協議,取0表示默認為TCP/IP協議。返回值:正確:創建的套接字句柄SOCKET
錯誤:INVALID_SOCKET(WSAGetLastError)功能:創建一個套接字,用于以后的數據傳輸說明:該函數調用指定了五元組中的“協議”一元。服務器和客戶端都要創建,服務器總是先于客戶進程啟動。
①創建套接字——socketAF_XXX與PF_XXXAF_前綴表示地址族,PF_前綴表示協議族。目前頭文件(socket.h)中為一給定協議定義的PF_值總是與此協議的AF_值相等。盡管這種相等關系并不保證永遠正確,若有人試圖給已有的協議改變這種約定,則許多現存代碼都將崩潰,目前兩個值混用現象比較多。②指定本地地址——bind函數定義:
intbind(SOCKETs,conststructsockaddr*name,intnamelen);輸入參數:
s:標識一個未捆綁套接字的句柄,用來等待客戶機的連接;
name:賦予套接字的地址,由structsockaddr結構表示;
namelen:name字段的值長度,以字節為單位。返回值:正確:0
錯誤:SOCKET_ERROR(WSAGetLastError)功能:將本地地址綁定到所創建的套接字上以在網絡上標識該套接字。關于bind函數的幾點說明地址種類常規地址:特定主機地址,特定端口號通配地址:INADDR_ANY,0進程指定結果IP地址端口通配地址0內核選擇IP和端口通配地址非0內核選擇IP,進程指定端口本地IP地址0進程指定IP,內核選擇端口本地IP地址非0進程指定IP和端口When?client端的socket是否需要關聯本地地址的?不建議connectsendto如果由系統選擇地址或端口,如何獲得套接字的雙方地址?Getsockname函數:獲得本地與套接字關聯的IP地址和端口號Getpeername函數:獲得通信對等端與套接字關聯的IP地址和端口號關于bind函數的幾點說明③監聽連接——listen功能: 把一個未連接的套接字轉換成一個被動套接字;規定了內核相應套接字排隊的最大連接個數。函數定義:intlisten(SOCKETs,intbacklog)輸入參數:
S:一個本地已建立的、尚未連接的套接字標識;
backlog:表示請求隊列的最大長度;返回值:正確:0
錯誤:SOCKET_ERROR操作系統Web服務器2.bind(80)801.socket()3.listen()Listenqueue服務器初始化未完成連接隊列(SYN_RCVD狀態)已完成連接隊列(ESTABLISHED狀態)服務器TCP到達的SYN分節三次握手完成accept兩隊列之和不超過backlogSYN,SEQ=x客戶進程服務器進程(主動打開)SYN_SENTSYN_RCVDESTABLISHEDESTABLISHEDSYN,ACK,SEQ=y,ACK=x+1ACK,SEQ=x+1,ACK=y+1SYN_RCVDESTABLISHED④建立套接字連接★
客戶機端——connect()函數定義:intconnect(SOCKETs,structsockaddrFAR*name,intnamelen)輸入參數:
s:本地套接字標識
name:要建立連接的遠地地址和端口
namelen:指明name的長度返回值:正確:0
錯誤:SOCKET_ERROROS1.socket()Web服務器2.bind(80)3.listen()80Listenqueue客戶connect()Requestfrom(IP,port)建立與服務器的連接關于connect函數的幾點說明connect函數完成的功能:注冊服務器地址與遠地服務器建立連接通過connect成功建立連接:服務器存在路徑可達返回值分析阻塞套接字:返回值表示連接是否成功;非阻塞套接字:返回SOCKET_ERROR,且錯誤號為WSAEWOULDBLOCK時,表示連接不能立即完成。Connect函數常見的若干錯誤ETIMEDOUT錯誤:若TCP客戶重發幾次SYN請求后仍然沒有收到SYN分節的響應。ECONNREFUSED錯誤:若服務器對客戶的SYN響應是RST,表示該服務器主機在客戶端指定的端口上沒有進程提供服務。EHOSTUNREACH錯誤或ENETUNREACH錯誤:客戶端發出SYN后收到ICMP目的不可達報文,在重試若干次后無效。注意:若connect失敗,則套接口不再可用,必須關閉,再次調用connect函數是無效的。關于connect函數的幾點說明操作系統Web服務器80Listen隊列客戶1客戶3客戶2客戶請求在listen隊列中獲取先進先出服務(排隊)服務器忙④建立套接字連接★
服務器端——accept()功能:服務器端調用該函數接收客戶進程的連接。函數定義:SOCKETaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen)輸入參數:s:本地套接字標識addr:存放客戶進程的地址和端口號addrlen:指明addr的長度返回值:用于與當前客戶進程通信的新套接字的標識,這個套接字與原有套接字的特性相同。說明:必須在listen之后調用。操作系統Web服務器80Listen隊列客戶1客戶3客戶2客戶請求在listen隊列中奪取先進先出服務accept()已連接的socketaccept()調用
accept函數的執行情況阻塞套接字當連接隊列上沒有等待的連接,accept進入阻塞狀態非阻塞套接字當連接隊列上沒有等待的連接,accept返回錯誤WSAEWOULDBLOCK⑤數據傳輸——send和recv★
發送數據——send函數定義:intsend(SOCKETs,constcharFAR*buf,intlen,intflags)輸入參數:
s:套接字標識
buf:存放發送數據的緩沖區
len:發送數據的字節總數
flags:對發送數據的處理方式
MSG_DONTROUTE:不要路由,MSG_OOB:帶外數據返回值:成功:發送的字節總數失敗:SOCKET_ERROR數據發送給誰?關于send函數的幾點說明使用場合流式套接字已建立連接的數據報套接字發送長度<套接字允許的最大長度相關錯誤:如果數據太長無法自動通過下層協議,則返回WSAEMSGSIZE錯誤,數據不會被發送。問題1:發送成功是否意味著數據傳送到達?否問題2:在SOCKE_STREAM中,send函數如何獲知數據的目的主機地址?Server:accept函數獲得對方地址Client:connect函數注冊對方地址問題3:如果傳送數據的緩存區空間不夠保存需傳送的數據,如何處理?阻塞模式:等待非阻塞模式:實際寫的數據可能在1到所需大小之間,其值取決于本地和遠端主機的緩沖區大小。通過異步處理確定何時能夠進一步發送數據關于send函數的幾點說明關于send函數的幾點說明問題4:根據數據長度、網絡允許最大長度和系統緩存的情況,實際返回的發送長度有哪些情況?
設待發送的數據長度為X,實際發送的字節總數為X’,分以下幾種情況討論:1)X>最大長度:error2)Sysbufsize<X<最大長度:阻塞模式:等待,成功發送后X’=X非阻塞模式:X’=min{本地系統緩存大小,遠端系統緩存大小}3)X<sysbuf:X’=X★
接收數據——recv函數定義:intrecv(SOCKETs,charFAR*buf,intlen,intflags)輸入參數:
s:套接字標識
buf:接收數據的緩沖區
len:指明buf的字節數
flags:指定處理數據的方式;
MSG_OOB:處理帶外數據;MSG_PEEK:保留數據返回值:
成功:接收的字節總數 失敗:SOCKET_ERROR⑤數據
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省威遠縣龍會中學2025屆高考考前模擬考試化學試題文試題含解析
- 天津市濱海新區大港油田一中2025年高三下學期期末考試(第四次月考)數學試題含解析
- 浙江省杭州市臨安區、富陽區2025年初三第一次診斷考試物理試題文試題含解析
- 四川省什邡市城南校2025年初三年級第三次畢業診斷及模擬測試英語試題試卷含答案
- 四川省南充市儀隴縣重點中學2024-2025學年初三下學期第三次質量檢查化學試題含解析
- 2023-2024學年遼寧大石橋初二上期期末檢測物理卷【含答案】
- 房地產買賣合同常見問題解答
- 感冒中醫治療課件
- 1人要自強 議題式公開課一等獎創新教學設計-統編版道德與法治七年級下冊
- Brand KPIs for ready-made-food Gino D'Acampo in the United Kingdom-外文版培訓課件(2025.2)
- 腸癌篩查早發現早治療
- 《化工工藝概論》解析
- 醫療器械經營安全培訓必備知識
- 網格員宣傳防詐騙知識講座
- (完整文本版)新概念英語第一冊單詞表默寫版1-144
- 《醫院勞動合同書》電子版
- 機車直流電機的電力拖動-直流電機的基本方程
- 2022-2023學年四川省巴中市巴州區川教版(三起)四年級下學期4月期中英語試卷(解析版)
- 互聯網信息審核員考試題庫大全-上(單選題匯總)
- 湖南省長沙市實驗小學小學語文五年級下冊期末試卷(含答案)
- 硫酸生產技術 二氧化硫催化氧化的化學平衡及動力學
評論
0/150
提交評論