協(xié)議分析socket網(wǎng)絡(luò)程序設(shè)計(jì)_第1頁(yè)
協(xié)議分析socket網(wǎng)絡(luò)程序設(shè)計(jì)_第2頁(yè)
協(xié)議分析socket網(wǎng)絡(luò)程序設(shè)計(jì)_第3頁(yè)
協(xié)議分析socket網(wǎng)絡(luò)程序設(shè)計(jì)_第4頁(yè)
協(xié)議分析socket網(wǎng)絡(luò)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

41UDPTCP一個(gè)完整的網(wǎng)間進(jìn)程通信需要由兩個(gè)進(jìn)程組成,并且只能使用同一種協(xié)議。也就是說(shuō),不可能通信的一端用TCP協(xié)議,而另一端用UDP協(xié)議。因此一個(gè)完整的網(wǎng)間通信需要一個(gè)五元組來(lái)標(biāo)識(shí):協(xié)議,本地地址,本地端,遠(yuǎn)地地址,遠(yuǎn)地端。這樣一個(gè)五TCP/IPstruct{shortsin_family; /*協(xié)議的地址族,IP協(xié)議是AF_INET*/u_shortsin_port; /*16位端,網(wǎng)絡(luò)字節(jié)順序*/structinaddrsinaddr; /*32位IP地址,網(wǎng)絡(luò)字節(jié)順序*/charsin_zero[8]; }TCP/IPsocket①、流式套接字議(FTP)即使用流式套接字。②、數(shù)據(jù)報(bào)套接字或重復(fù),并且接收順序。網(wǎng)絡(luò)文件系統(tǒng)(NFS)使用數(shù)據(jù)報(bào)式套接字。③原始套接字該接口允許對(duì)較低層協(xié)議,如IP、ICMP直接。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或現(xiàn)①、創(chuàng)建套接字——SOCKETsocket(intaf,inttype,int該調(diào)用要接收三個(gè)參數(shù):af、type、protocolaf指定通信發(fā)生的區(qū)域,UNIX系統(tǒng)支持的地址族有:AFUNIXAFINETAFNS等,而DOSWINDOWSAF_INET,因此,地址族與協(xié)議族相同。參數(shù)type描述要建立的套接字的類(lèi)型。參數(shù)protocol說(shuō)明該套接0,使用默認(rèn)的連接模式。根據(jù)這幾個(gè)參數(shù)建立一個(gè)套接字,并將相應(yīng)的資源分配給它,同時(shí)返回一個(gè)整型套接字號(hào)。因此,socket()②、指定本地地址——將套接字地址(包括本機(jī)地址與本地端口地址)與所創(chuàng)建的套接字號(hào)聯(lián)系起來(lái),即將名intbind(SOCKETs,conststructsockaddrFAR*name,intssocket()調(diào)用返回的并且未作連接的套接字描述符(套接字號(hào))name是賦給套接字s的本地地址(名字),其長(zhǎng)度可變,結(jié)構(gòu)隨通信域的不同而不同。namelenname的長(zhǎng)度。如果沒(méi)有錯(cuò)誤發(fā)生,bind()0SOCKETERROR。③、建立套接字連接——connect()這兩個(gè)系統(tǒng)調(diào)用用于完成一個(gè)完整相關(guān)的建立,其connect()用于建立連接。無(wú)連接的套接字進(jìn)程也可以調(diào)用connect(),但這時(shí)在進(jìn)程之間沒(méi)有實(shí)際的報(bào)文交換,調(diào)用將從本地intconnect(SOCKETs,conststructsockaddrFAR*name,int如果沒(méi)有錯(cuò)誤發(fā)生,connect()0SOCKET_ERROR。在面向連接的族相關(guān)。因此bind()和connect()無(wú)須協(xié)議作為參數(shù)。SOCKETaccept(SOCKETs,structsockaddrFAR*addr,intsaccept()listen()。addr指向客戶(hù)方套接字地址結(jié)構(gòu)的指針,用來(lái)接收連接實(shí)體的地址。addr的確切格式由套接字創(chuàng)建時(shí)建立的地址族決定。addrlen為客戶(hù)方套接字地址的長(zhǎng)度(字節(jié)數(shù))。如果沒(méi)有錯(cuò)誤發(fā)生,accept()返回一個(gè)SOCKET類(lèi)型的值,表示接收到的套接字的描述符。否則返回值ctr和lnrnctscnnt()調(diào)ctr和as無(wú)關(guān)。bind()指定五元組中的本地二元,即本機(jī)地址和端,其用法與是否面向連接有bind()connect()自動(dòng)完成。若采用無(wú)連接,客戶(hù)方必須使用bind()以獲得一個(gè)以上討論僅對(duì)客戶(hù)/④、連接——intlisten(SOCKETs,intbacklog):s標(biāo)識(shí)一個(gè)本地已建立、尚未連接的套接字號(hào),backlog表示請(qǐng)求連接隊(duì)列的最大長(zhǎng)度,用于限制排隊(duì)請(qǐng)求的個(gè)數(shù),目前允許的最大值5。如果沒(méi)有錯(cuò)誤發(fā)生,listen()0SOCKET_ERROR長(zhǎng)度為backlog的請(qǐng)求迎接隊(duì)列。調(diào)用listen()是服務(wù)器接收接請(qǐng)求的四個(gè)步驟中的第二步。它在調(diào)用socket()分配一bind()s賦于一個(gè)名字之后調(diào)用,而且一定要在accept()之前調(diào)用。⑤、數(shù)據(jù)傳輸——send()當(dāng)接建立以后,就可以傳輸數(shù)據(jù)了。常用的系統(tǒng)調(diào)用有send()和recv()。sintsend(SOCKETs,constcharFAR*buf,intlen,ints為己連接的本地套接字描述符。buf指向存有發(fā)送數(shù)據(jù)的緩沖區(qū)的指針,其長(zhǎng)度lenoflags指定傳輸控制方式,如是否發(fā)送帶外數(shù)據(jù)等。如果沒(méi)有錯(cuò)誤發(fā)生,send()返回總共發(fā)送的字節(jié)數(shù)。否則它返回SOCKET_ERROR。trecv(OCTscrR*,te,itflags)sfln指定。fas收帶外數(shù)據(jù)等。如果沒(méi)有錯(cuò)誤發(fā)生,rcv,()返回總共接收的字節(jié)數(shù)。如果連接被關(guān)閉,返回CTRRO。⑥、輸入/輸出多路復(fù)用——slct()f_stintselect(intnfds,fdsetFAR*readfds,fdsetFAR*writefds,fd_setFAR:kexceptfds,conststructtimevalFAR*timeout):nfds指明被檢查的套接字描述符的readfds指向要做讀檢測(cè)的套接字描述符集合的指針,調(diào)用者希望從中數(shù)據(jù)。參數(shù)writefds指向要做寫(xiě)檢測(cè)的套接字描述符集合的指針。exceptfds指向要檢測(cè)是否出錯(cuò)的套接字描述符集合的指針。timeout指向select()函數(shù)等待的最大時(shí)NULL則為阻塞操作。select()fdset結(jié)構(gòu)中已準(zhǔn)備好的套接字描述符的總數(shù)目,或者是發(fā)生錯(cuò)誤則返回SOCKET_ERROR。⑦、關(guān)閉套接字——BOOLclosesocket(SOCKETS)sclosesocket()0SOCKETERROR服務(wù) 客3、用于面向連接協(xié)議(如TCP)的SOCKET系統(tǒng)調(diào)用流程框圖服務(wù) 客UDP客戶(hù)-服務(wù)器程序的實(shí)例,作為參考。#pragma#defineSERVUDPPORT6000 /*服務(wù)器進(jìn)程端,視具體情況而定*/#defineSERV_HOST_ADDR"8" #definePRINTERROR(s)voidDatagramServer(ShOrtnPort){SOCKET/*創(chuàng)建一個(gè)數(shù)據(jù)報(bào)類(lèi)型的socket*/ SOCKDGRAM,//socket類(lèi)型IPPROTOUDP);//協(xié)議類(lèi)型:UDP{}SOCKADDR_INsaServer;saServer,sinaddr.saddr=INADDRANY;//WinSocksaServer.sin=(nport)服務(wù)器進(jìn)程端intnRet:nRet=bind(theSocket,//Socket描述符(LPSOCKADDR)&saServer服務(wù)器地址sizeof(structSOCkaddt)//地址長(zhǎng)度{}SOCKADDR_INsacharintnLen=sizeof(sa);{nRet=recvfrom(theSocket,//已綁定定的socketsizeof(szBuf),緩沖區(qū)大小0,//Flags(LPSOCKADDR)&sa,//接收客戶(hù)端地址的緩沖區(qū) {strcpy(szBuf,"FromtheServer”); nLen目的地址,地址長(zhǎng)度}voidmain(){WORDwVersionRequested=MAKEWORD(1,1):WSADATAwsaData;intnRet;{fprintf(Stderr,"/nWrongversion\n");}}根據(jù)實(shí)驗(yàn)原理中介紹的內(nèi)容,設(shè)計(jì)一個(gè)面向連接的客戶(hù)-服務(wù)器系統(tǒng),實(shí)現(xiàn)二者之間的TP-#defineSERVTCPPORT6000 /*服務(wù)器進(jìn)程端,視具體情況而定*/#defineSERVHOSTADDR"0" intsockfd;#pragmacomment(l//線(xiàn)程用來(lái)處理客戶(hù)端的請(qǐng)求,服務(wù)器主進(jìn)程每與某客戶(hù)端建立接之后,便啟動(dòng)DWORD{intcharszBUf[1024];memset(szBuf,0,sizeof(szBuf)); if(nRet==INVALIDSOCKET){return0;}printf("\nDatastrcpy(szBuf,"FromtheServer"); /*結(jié)束連接,socket*/return0;}int{intintpHandle=-structsockaddr_inSOCKETsocket;DWORDHANDLEdwThread;/*初始化WinsockAPI,即連接Winsock庫(kù)*/WORDwVersionRequested=MAKEWORD(1,1);WSADATAwsaData;printf("WSAStartupfailed%s\n",WSAGetLasterror());}if((sockfd=socket(AFINET,SOCK_STREAM,0))<0)printf("server:can'topenstreamsockef\n");memset((char*)&servaddr,0,sizeof(structsockaddr_in));if(bind(sockfd.(structsockaddr*)&serv_addr,sizeof(serv_addr))<0)printf("server:can'tbindlocaladdress"):{clilen=sizeof(SOCKADDRIN);if(socket==INVALID{printf("acceptfailed!\n");}printf("Connectionacceptedonsocket:%dfrom:%s\n",inetntoa(SockAddrdwT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論