資源描述:
《Windows Socket 網(wǎng)絡(luò)編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、WindowsSocket網(wǎng)絡(luò)編程(二)——套接字編程原理作者:冰點(diǎn)工作室小鷹一、客戶機(jī)/服務(wù)器模式在TCP/IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式(Client/Servermodel)。該模式的建立基于以下兩點(diǎn):1、非對(duì)等作用;2、通信完全是異步的??蛻魴C(jī)/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù):(過(guò)程如下)1、打開(kāi)一通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求。2、等待客戶請(qǐng)求到達(dá)該端口。3、接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送
2、應(yīng)答信號(hào)。4、返回第二步,等待另一客戶請(qǐng)求5、關(guān)閉服務(wù)器。客戶方:1、打開(kāi)一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。2、向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求……3、請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。二、基本套接字為了更好說(shuō)明套接字編程原理,給出幾個(gè)基本的套接字,在以后的篇幅中會(huì)給出更詳細(xì)的使用說(shuō)明。1、創(chuàng)建套接字——socket()功能:使用前創(chuàng)建一個(gè)新的套接字格式:SOCKETPASCALFARsocket(intaf,inttype,intprocotol);參數(shù):af:通信發(fā)生的區(qū)域type:要建
3、立的套接字類型procotol:使用的特定協(xié)議2、指定本地地址——bind()功能:將套接字地址與所創(chuàng)建的套接字號(hào)聯(lián)系起來(lái)。格式:intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù):s:是由socket()調(diào)用返回的并且未作連接的套接字描述符(套接字號(hào))。其它:沒(méi)有錯(cuò)誤,bind()返回0,否則SOCKET_ERROR地址結(jié)構(gòu)說(shuō)明:structsockaddr_in{shortsin_family;//AF_INETu_shortsin_
4、port;//16位端口號(hào),網(wǎng)絡(luò)字節(jié)順序structin_addrsin_addr;//32位IP地址,網(wǎng)絡(luò)字節(jié)順序charsin_zero[8];//保留}3、建立套接字連接——connect()和accept()功能:共同完成連接工作格式:intPASCALFARconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);SOCKETPASCALFARaccept(SOCKETs,structsockaddrFAR*name,intFAR*addrlen);參數(shù):同
5、上4、監(jiān)聽(tīng)連接——listen()功能:用于面向連接服務(wù)器,表明它愿意接收連接。格式:intPASCALFARlisten(SOCKETs,intbacklog);5、數(shù)據(jù)傳輸——send()與recv()功能:數(shù)據(jù)的發(fā)送與接收格式:intPASCALFARsend(SOCKETs,constcharFAR*buf,intlen,intflags);intPASCALFARrecv(SOCKETs,constcharFAR*buf,intlen,intflags);參數(shù):buf:指向存有傳輸數(shù)據(jù)的緩沖區(qū)的指針。6、多路復(fù)
6、用——select()功能:用來(lái)檢測(cè)一個(gè)或多個(gè)套接字狀態(tài)。格式:intPASCALFARselect(intnfds,fd_setFAR*readfds,fd_setFAR*writefds,fd_setFAR*exceptfds,conststructtimevalFAR*timeout);參數(shù):readfds:指向要做讀檢測(cè)的指針writefds:指向要做寫(xiě)檢測(cè)的指針exceptfds:指向要檢測(cè)是否出錯(cuò)的指針timeout:最大等待時(shí)間7、關(guān)閉套接字——closesocket()功能:關(guān)閉套接字s格式:BOOLPA
7、SCALFARclosesocket(SOCKETs);三、典型過(guò)程圖2.1面向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖2.2無(wú)連接協(xié)議的套接字調(diào)用時(shí)序圖2.3面向連接的應(yīng)用程序流程圖類比(什么是socket?)裝上你的新電話(怎樣偵聽(tīng)?)撥號(hào)(如何調(diào)用socket)談話(如何通過(guò)sockets交談)掛起(結(jié)束)世界語(yǔ)(交流的語(yǔ)言很重要)未來(lái)在你的掌握了(下一步?)介紹當(dāng)你進(jìn)入U(xiǎn)NIX的神秘世界后,立刻會(huì)發(fā)現(xiàn)越來(lái)越多的東西難以理解。對(duì)于大多數(shù)人來(lái)說(shuō),BSDsocket的概念就是其中一個(gè)。這是一個(gè)很短的教程來(lái)解釋他們是什么、他們?nèi)绾喂?/p>
8、作并給出一些簡(jiǎn)單的代碼來(lái)解釋如何使用他們。類比(什么是socket?)socket是進(jìn)行程序間通訊(IPC)的BSD方法。這意味著socket用來(lái)讓一個(gè)進(jìn)程和其他的進(jìn)程互通信息,就象我們用電話來(lái)和其他的人交流一樣。用電話來(lái)比喻是很恰當(dāng)?shù)模覀冊(cè)诤竺鎸⒁恢庇秒娫掃@個(gè)概念來(lái)描敘socket。裝上你的新電話(怎樣偵聽(tīng)?)一