第13章TCPIP網(wǎng)絡(luò)編程實(shí)踐_第1頁(yè)
第13章TCPIP網(wǎng)絡(luò)編程實(shí)踐_第2頁(yè)
第13章TCPIP網(wǎng)絡(luò)編程實(shí)踐_第3頁(yè)
第13章TCPIP網(wǎng)絡(luò)編程實(shí)踐_第4頁(yè)
第13章TCPIP網(wǎng)絡(luò)編程實(shí)踐_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第13章TCP/IP網(wǎng)絡(luò)編程實(shí)踐網(wǎng)絡(luò)應(yīng)用程序的標(biāo)識(shí)問(wèn)題客戶/服務(wù)器模型TCP/IP應(yīng)用程序工作模型TCP網(wǎng)絡(luò)應(yīng)用編程UDP網(wǎng)絡(luò)應(yīng)用編程UDP廣播編程原始套接字編程213.1網(wǎng)絡(luò)應(yīng)用程序的標(biāo)識(shí)問(wèn)題應(yīng)用程序分為兩種:一種程序不需要使用其他程序產(chǎn)生的數(shù)據(jù)并且其他程序也不使用它輸出的數(shù)據(jù);另一種程序需要與其他的應(yīng)用程序進(jìn)行數(shù)據(jù)交換才能完成其功能,也就是說(shuō)程序之間存在通信問(wèn)題。進(jìn)程間通信的問(wèn)題也可以分為兩種:一種是在操作系統(tǒng)中論述的單機(jī)系統(tǒng)中進(jìn)程間的通信問(wèn)題;另一種一般是在不同系統(tǒng)的進(jìn)程間通過(guò)網(wǎng)絡(luò)通信協(xié)議進(jìn)行的進(jìn)程間的通信問(wèn)題。3網(wǎng)絡(luò)應(yīng)用程序的標(biāo)識(shí)問(wèn)題同一系統(tǒng)中不同進(jìn)程間進(jìn)行通信時(shí),通過(guò)系統(tǒng)分配的進(jìn)程號(hào)(ProcessID)就可以惟一標(biāo)識(shí)一個(gè)進(jìn)程要通信的進(jìn)程只要知道對(duì)方的進(jìn)程號(hào)就可以進(jìn)行通信網(wǎng)絡(luò)情況下不能只簡(jiǎn)單地用進(jìn)程號(hào)來(lái)標(biāo)識(shí)不同的進(jìn)程,因?yàn)楦髦鳈C(jī)都獨(dú)立地分配其進(jìn)程號(hào)為了惟一地標(biāo)識(shí)網(wǎng)絡(luò)中通信的一個(gè)進(jìn)程(即通信的某一方),就要使用一個(gè)如下的三元組:(本地協(xié)議,本地IP地址,本地端口號(hào))4網(wǎng)絡(luò)應(yīng)用程序的標(biāo)識(shí)問(wèn)題一個(gè)三元組只指定了通信時(shí)一條連接的半個(gè)部分,即通信的一方,因而稱為半相關(guān)(Half-association)。要完整地表示網(wǎng)絡(luò)中進(jìn)行通信的兩個(gè)進(jìn)程,那么就要使用一個(gè)如下結(jié)構(gòu)的六元組:(本地協(xié)議,本地地址,本地端口號(hào),遠(yuǎn)地協(xié)議,遠(yuǎn)地地址,遠(yuǎn)地端口號(hào))通信的兩個(gè)進(jìn)程在端到端的傳輸層只能使用相同的協(xié)議。一個(gè)完整的網(wǎng)間通信就可以簡(jiǎn)化為用一個(gè)五元組來(lái)標(biāo)識(shí)通信的兩個(gè)進(jìn)程:(協(xié)議,本地IP地址,本地端口號(hào),遠(yuǎn)程IP地址,遠(yuǎn)程端口號(hào))513.2客戶/服務(wù)器模型客戶/服務(wù)器模型是一種通信模式,一個(gè)應(yīng)用程序被動(dòng)地等待,而另一個(gè)應(yīng)用程序通過(guò)請(qǐng)求啟動(dòng)通信客戶和服務(wù)器分別指兩個(gè)應(yīng)用程序,客戶端(client)向服務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器(server)對(duì)客戶端的請(qǐng)求做出響應(yīng)。6客戶/服務(wù)器模型1.客戶/服務(wù)器模型的特點(diǎn)客戶/服務(wù)器模型的通信方式從所具有的資源角度來(lái)說(shuō),有明顯的非對(duì)稱性。服務(wù)器擁有較多的資源,具有運(yùn)算能力強(qiáng),數(shù)據(jù)存儲(chǔ)容量大,通信速度快,系統(tǒng)的可靠性高等優(yōu)點(diǎn)客戶擁有較少的資源,在各方面的性能一般要比服務(wù)器差客戶/服務(wù)器模型在工作時(shí),要求有一套客戶機(jī)和服務(wù)器能共同識(shí)別的規(guī)則或約定,用來(lái)保證服務(wù)器方可以識(shí)別客戶提出的請(qǐng)求是什么,客戶方也能夠解釋收到的服務(wù)器應(yīng)答。從本質(zhì)上來(lái)說(shuō),這其實(shí)就是服務(wù)器方和客戶方在通信中所使用的一套協(xié)議,它必須在通信的兩端都被實(shí)現(xiàn)。7客戶/服務(wù)器模型根據(jù)實(shí)際情況,協(xié)議可能是對(duì)稱的也可能是非對(duì)稱的。在對(duì)稱的協(xié)議中,每一方都有可能扮演主從角色;在非對(duì)稱協(xié)議中,一方被不可改變地認(rèn)為是主機(jī)(服務(wù)器),而另一方則是從機(jī)(客戶機(jī))2.服務(wù)器的分類根據(jù)服務(wù)器提供服務(wù)方式的不同,服務(wù)器可以分為串行服務(wù)器和并發(fā)服務(wù)器串行服務(wù)器只有一個(gè)進(jìn)程,用串行的方式對(duì)客戶的請(qǐng)求提供服務(wù);并發(fā)服務(wù)器可以為請(qǐng)求的每一個(gè)客戶創(chuàng)建一個(gè)進(jìn)程或線程,然后由對(duì)應(yīng)的進(jìn)程或線程給每一個(gè)客戶提供服務(wù)8客戶/服務(wù)器模型3.客戶/服務(wù)器模型的特點(diǎn)對(duì)于服務(wù)器方來(lái)說(shuō):服務(wù)進(jìn)程一般在啟動(dòng)后就一直運(yùn)行,以等待客戶請(qǐng)求的到來(lái),除非服務(wù)被禁止或服務(wù)程序被強(qiáng)制終止服務(wù)器方進(jìn)程使用的是眾所周知的端口,否則客戶無(wú)法知道提供服務(wù)的端口,也就不可能提出服務(wù)的請(qǐng)求一般,服務(wù)器方通常擁有較多的資源服務(wù)器方進(jìn)程可以并行處理一定數(shù)量的客戶請(qǐng)求服務(wù)器方在通信時(shí)屬于被動(dòng)的一方9客戶/服務(wù)器模型對(duì)于客戶方來(lái)說(shuō):在需要時(shí)向服務(wù)器提出請(qǐng)求,請(qǐng)求的服務(wù)得到滿足并完成處理任務(wù)后,就終止客戶程序的執(zhí)行向系統(tǒng)申請(qǐng)臨時(shí)端口與服務(wù)器方進(jìn)程進(jìn)行通信一般擁有相對(duì)較少的資源客戶方在通信時(shí)屬于主動(dòng)的一方1013.3TCP/IP應(yīng)用程序工作模型TCP/IP協(xié)議的核心內(nèi)容在層次結(jié)構(gòu)的低三層,即網(wǎng)絡(luò)接口層、IP層和傳輸層。這三層的功能一般是由操作系統(tǒng)的內(nèi)核來(lái)實(shí)現(xiàn)兩臺(tái)主機(jī)的進(jìn)程間通過(guò)網(wǎng)絡(luò)編程接口進(jìn)行通信的原理圖:11TCP/IP應(yīng)用程序工作模型使用TCP或UDP端口號(hào)作為一個(gè)服務(wù)器程序的標(biāo)識(shí)server啟動(dòng)時(shí)在本地主機(jī)注冊(cè)TCP或UDP端口號(hào)client直接向server使用的UDP端口發(fā)送信息訪問(wèn)某個(gè)特定的服務(wù);如果使用的是TCP傳輸協(xié)議,則client與server使用的TCP端口先建立連接,然后發(fā)送信息運(yùn)行server的主機(jī)在注冊(cè)的端口上收到信息后,將信息轉(zhuǎn)交給注冊(cè)該端口的server程序處理套接字綁定接收數(shù)據(jù)處理數(shù)據(jù)返回處理結(jié)果UDP循環(huán)服務(wù)器處理過(guò)程TCP循環(huán)服務(wù)器處理過(guò)程服務(wù)器客戶客戶客戶客戶循環(huán)服務(wù)器父進(jìn)程服務(wù)器子進(jìn)程服務(wù)器子進(jìn)程服務(wù)器子進(jìn)程客戶機(jī)客戶機(jī)客戶機(jī)…………并發(fā)服務(wù)器處理流程1413.4TCP網(wǎng)絡(luò)應(yīng)用編程服務(wù)器程序流程(多線程):初始化并創(chuàng)建socket填寫本機(jī)地址信息綁定并監(jiān)聽(tīng)一個(gè)固定的端口收到Client的連接后建立一個(gè)新的socket連接產(chǎn)生一個(gè)新的線程與Client進(jìn)行通信子通信結(jié)束后中斷與Client的連接

客戶端程序流程:初始化并創(chuàng)建socket填寫服務(wù)器地址信息連接服務(wù)器與服務(wù)器進(jìn)行通信通信結(jié)束后斷開(kāi)連接編程實(shí)例請(qǐng)見(jiàn)12.4.115sockaddr_inserver_Sin;

SOCKETsSocket;建立Socketbind(

),指定sSocket到server_Sinlisten(

),sSocket進(jìn)入偵聽(tīng)狀態(tài)accept(

),sSocket等待接受Client端的連接請(qǐng)求建立連接,accept(

)傳回新的socket名稱Socket1recv(

)/send(

),依Socket1來(lái)傳送與接收數(shù)據(jù),直到交換完成closesocket(

),關(guān)閉Socket1closesocket(

),關(guān)閉sSocketSOCKETcSocket; 建立StreamSocketconnect(

),將cSocket與Server端連接send(

)/recv(

),依cSocket來(lái)傳送與接收數(shù)據(jù),直到交換完成closesocket

(),關(guān)閉cSocket,結(jié)束TCP對(duì)話TCPServerTCPClientWSAStartup(?),初始化winsockWSACleanup(?),釋放winsock客戶端與服務(wù)器TCP通信建立過(guò)程1613.5UDP網(wǎng)絡(luò)應(yīng)用編程無(wú)連接的數(shù)據(jù)報(bào)(SOCK_DGRAM)傳輸服務(wù)在傳輸層使用UDP協(xié)議。特點(diǎn)是不需要在客戶和服務(wù)器之間先建立連接。通信的任何一方可以先發(fā)送數(shù)據(jù),這樣首先發(fā)送數(shù)據(jù)的一方就成了客戶端,而接收數(shù)據(jù)的一方就是服務(wù)器端。在數(shù)據(jù)傳輸完成后,只要關(guān)閉套接口,釋放網(wǎng)絡(luò)資源,通信過(guò)程就結(jié)束了。17無(wú)連接的客戶/服務(wù)器程序工作流程(1)使用WSAStartup()函數(shù)檢查系統(tǒng)協(xié)議棧的安裝情況。(2)使用socket()或WSASocket()函數(shù)創(chuàng)建套接口,以確定相關(guān)五元組的協(xié)議。(3)使用bind()函數(shù)將創(chuàng)建的套接口與本地地址綁定。它確定了相關(guān)五元組中的本地IP地址和端口號(hào)(4)使用sendto()或WSASendTo()函數(shù)發(fā)送數(shù)據(jù),使用recvfrom()或WSARecvFrom()函數(shù)接收數(shù)據(jù)。(5)使用closesocket()函數(shù)關(guān)閉套接口。(6)調(diào)用WSACleanup()函數(shù),結(jié)束WindowsSocketsAPI的使用。至此,一次無(wú)連接的數(shù)據(jù)報(bào)傳輸過(guò)程結(jié)束。18無(wú)連接的客戶/服務(wù)器程序工作流程服務(wù)器客戶端19無(wú)連接的客戶/服務(wù)器程序工作流程無(wú)連接的客戶/服務(wù)器編程注意事項(xiàng):(1)通信的一方可以不用bind函數(shù)綁定IP地址和端口(2)在建立Socket后若沒(méi)有綁定地址,直接用sendto函數(shù)發(fā)數(shù)據(jù)時(shí),系統(tǒng)會(huì)自動(dòng)分配地址和端口(3)在recvfrom函數(shù)接收數(shù)據(jù)前,套接字必須有指定的本地地址和端口(4)一般由不綁定IP地址和端口的一方首先向綁定地址的一方發(fā)送數(shù)據(jù)(5)服務(wù)器的一方必須先啟動(dòng),否則客戶請(qǐng)求傳不到服務(wù)進(jìn)程(6)發(fā)送數(shù)據(jù)時(shí),發(fā)送方除指定本地套接口的地址外,還需指定接收方套接口的地址,從而在數(shù)據(jù)收發(fā)過(guò)程中動(dòng)態(tài)地建立全相關(guān)20UDP網(wǎng)絡(luò)通信程序?qū)嵗粋€(gè)簡(jiǎn)單的UDP客戶/服務(wù)器程序?qū)嵗绦蛘f(shuō)明:程序使用的編程環(huán)境為VisualC++6.0,使用的是控制臺(tái)程序“Win32ConsoleApplication”通信協(xié)議使用無(wú)連接的UDP協(xié)議(SOCK_DGRAM)服務(wù)器端IP地址使用系統(tǒng)指定的IP地址,端口號(hào)在程序中指定為5050,用符號(hào)常量定義服務(wù)器端從客戶端接收并顯示信息,客戶端向服務(wù)器發(fā)送的信息為“Hello!Iamaclient.”服務(wù)器也向客戶端發(fā)送“Hello!Iamaserver.”信息,客戶端接收從服務(wù)器發(fā)送的信息并進(jìn)行顯示21UDP服務(wù)器源代碼2223242526UDP客戶端源代碼27282930服務(wù)器運(yùn)行結(jié)果第1次客戶端連接第2次客戶端連接客戶端運(yùn)行結(jié)果31廣播/多播報(bào)文的發(fā)送廣播/多播報(bào)文的接收13.6UDP廣播/多播編程32套接口選項(xiàng)使用setsockopt和getsockopt函數(shù)可以設(shè)置或者讀取套接口的選項(xiàng)值,這兩個(gè)函數(shù)的定義如下:intsetsockopt(SOCKETs,intlevel,intoptname,constcharFAR*optval,intoptlen);intgetsockopt(SOCKETs,intlevel,intoptname,charFAR*optval,intFAR*optlen);參數(shù)說(shuō)明:參數(shù)s是套接口描述字level[IN/lN]是套接口選項(xiàng)的級(jí)別optname[IN/lN]是用戶指定的選項(xiàng)名稱optval[IN/OUT]是一個(gè)指向變量的指針,它的大小由optlen[IN/OUT]指定,通過(guò)optval可以設(shè)置或者讀取指定選項(xiàng)的值如果沒(méi)有錯(cuò)誤發(fā)生,函數(shù)返回0;否則返回SOCKET_ERROR

33套接口選項(xiàng)Winsock的套接口選項(xiàng)主要有兩種類型:布爾型,用于啟用或禁止套接口的某個(gè)屬性;選項(xiàng)參數(shù),整型或者結(jié)構(gòu)體,設(shè)置特定的值。為了啟用某個(gè)布爾型選項(xiàng),optval應(yīng)指向某個(gè)非零整數(shù),若要禁用,則指向一個(gè)零值整數(shù),同時(shí)optlen參數(shù)值應(yīng)該等于布爾型大小,即sizeof(BOOL);對(duì)于其他選項(xiàng)類型,optval應(yīng)指向整型或者結(jié)構(gòu)體,optlen值為整型或者結(jié)構(gòu)體的大小。Winsock支持的全部選項(xiàng)級(jí)別有

SOL_SOCKET、

IPPROTO_lP、IPPROTO_IPV6、IPPROTO_RM、IPPROTO_TCP、IPPROTO_UDP、NSPROTO_lPX、SOL_APPLETALK、SOL_IRLMP。34SOL_SOCKET級(jí)別的部分選項(xiàng)(1)SO_BROADCAST,BOTH,布爾型(BOOL)。用于允許/禁止發(fā)送廣播報(bào)文。BOTH:該選項(xiàng)既可以設(shè)置也可以讀取。(2)SO_RCVTIMEO,BOTH,structtimeval結(jié)構(gòu)型,用于設(shè)置數(shù)據(jù)接收超時(shí)值。該選項(xiàng)用于在一個(gè)阻塞套接口為接收函數(shù)設(shè)定一個(gè)超時(shí)值。當(dāng)調(diào)用接收函數(shù)時(shí),如果在SO_RCVTIMEO指定的時(shí)間內(nèi)沒(méi)有數(shù)據(jù)到來(lái),那么函數(shù)調(diào)用也會(huì)結(jié)束并且返回錯(cuò)誤10060(WSAETIMEDOUT)。(3)SO_SNDTIMEO,BOTH,structtimeval結(jié)構(gòu)型,用于設(shè)置數(shù)據(jù)發(fā)送超時(shí)值。該選項(xiàng)用于在一個(gè)阻塞套接口為發(fā)送函數(shù)設(shè)定一個(gè)超時(shí)值。當(dāng)調(diào)用發(fā)送函數(shù)時(shí),如果在SO_SNDTIMEO指定的時(shí)間內(nèi)數(shù)據(jù)還未發(fā)送成功,那么函數(shù)調(diào)用也會(huì)結(jié)束并且返回錯(cuò)誤10060(WSAETIMEDOUT)。35IPPROTO_IP級(jí)別的選項(xiàng)(1)IP_HDRINCL,BOTH,布爾型,僅適用于原始套接口(SOCK_RAW)如果應(yīng)用程序希望能接收IP層及IP層以上的所有數(shù)據(jù)或者自行組裝包含IP層在內(nèi)的報(bào)文,那么可以設(shè)置該選項(xiàng)為TRUE(2)IP_ADD_MEMBERSHIP,SET,structip_mreq結(jié)構(gòu)型,用于加入多播組該選項(xiàng)用于將指定網(wǎng)絡(luò)接口上的套接口加入IP多播組,此套接口必須是AF_INET地址族并且類型為SOCK_DGRAM36IPPROTO_IP級(jí)別的選項(xiàng)(3)IP_DROP_MEMBERSHIP,SET,structip_mreq結(jié)構(gòu)型,用于退出多播組。該選項(xiàng)的使用與IP_ADD_MEMBERSHIP類似。(4)IP_MULTICAST_IF,BOTH,DWORD類型,設(shè)置/讀取多播的本地接口。該選項(xiàng)用于設(shè)置或讀取本地接口。在設(shè)置了本地的多播外出接口后,本地機(jī)器以后發(fā)出的任何多播數(shù)據(jù)都會(huì)經(jīng)由它傳送出去,該選項(xiàng)適用于多宿主主機(jī)。37IPPROTO_IP級(jí)別的選項(xiàng)(5)IP_MULTICAST_LOOP,BOTH,布爾型,用于啟用或者禁止多播報(bào)文環(huán)回。在默認(rèn)的情況下,當(dāng)發(fā)送IP多播數(shù)據(jù)時(shí),如果發(fā)送套接口本身也屬于該多播組,那么數(shù)據(jù)會(huì)原封不動(dòng)地返回一份至套接口——環(huán)回(Ioopback)。若將該選項(xiàng)設(shè)為FALSE,發(fā)出的任何數(shù)據(jù)都不會(huì)投遞至套接字的進(jìn)入數(shù)據(jù)隊(duì)列中。(6)IP_MULTICAST_TTL,BOTH,DWORD類型,設(shè)置/讀取套接口上IP多播的TTL值。在默認(rèn)情況下,多播數(shù)據(jù)報(bào)采用的TTL值為1。該選項(xiàng)可用于讀取或者設(shè)定該值。多播TTL值的大小影響到多播數(shù)據(jù)的傳播范圍,只有在有效范圍內(nèi)的組成員才會(huì)收到數(shù)據(jù)。38廣播報(bào)文的發(fā)送在默認(rèn)情況下,UDP套接口是無(wú)法發(fā)送廣播報(bào)文的。通過(guò)下面的代碼段,可以確認(rèn)廣播選項(xiàng)是默認(rèn)關(guān)閉的

BOOLbBroadcast;

int

optlen=sizeof(bBroadcast);

if

(getsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,&optlen)==SOCKET_ERROR){closesocket(sock);

WSACleanup();

return-1;}if(bBroadcast)

printf("Broadcastenableddefault!\n");

elseprintf("Broadcastdisenableddefault!\n");程序輸出"Broadcastdisenableddefault!"39廣播報(bào)文的發(fā)送套接口啟用/禁止廣播是通過(guò)

SOL_SOCKET->SO_BROADCAST

選項(xiàng)來(lái)完成的要發(fā)送廣播報(bào)文,必須先啟用SO_BROADCAST選項(xiàng):

bBroadcast=true;

optlen=sizeof(bBroadcast);

if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,optlen)==SOCKET_ERROR){closesocket(sock);

WSACleanup();

return-1;

}40廣播報(bào)文的發(fā)送成功地啟用SO_BROADCAST后,就可以發(fā)送廣播報(bào)文:

structsockaddr_inaddr;

memset(&addr,0,eizeof(addr));

addr.sin_addr.s_addr=INADDR_BROADCAST;

addr.sin_family=AF_INET;

addr.sin_port=htons(9999);

constchar*msg="Hello!BroadcastTest!";

intlen=strlen(msg);

if(sendto(sock,msg,len,0,(structsockaddr*)&addr,sizeof(addr))==SOCKET_ERROR){closesocket(sock);

WSACleanup();

return-1;}41廣播報(bào)文的接收接收廣播報(bào)文不需要任何額外的設(shè)置,創(chuàng)建UDP套接口后,綁定所需的端口即可以上面的發(fā)送程序?yàn)槔邮辗匠绦蚨稳缦拢?/p>

SOCKETsock=socket(AF_INET,SOCK_DGRAM,0);structsockaddr_inaddr;memset(&addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(9999);addr.sin_addr.s_addr=INADDR_ANY;bind(sock,(structsockaddr*)&addr,sizeof(addr));42廣播報(bào)文的接收 intret; charbuf[5000]; memset(buf,0,sizeof(buf)); while(1){ ret=recvfrom(sock,buf,5000,0,NULL,NULL); if(ret==SOCKET_ERROR){ printf("recvfrorn:%d\n",WSAGetLastError()); break; }else printf("recvd%dbytes:%s\n",ret,buf);} WSACleanup();43UDP廣播服務(wù)器源代碼444546474849UDP廣播客戶端源代碼505152535455服務(wù)器運(yùn)行結(jié)果客戶端運(yùn)行結(jié)果UDP多播編程廣播報(bào)文的優(yōu)點(diǎn)設(shè)計(jì)報(bào)文廣播是用于資源發(fā)現(xiàn)和減少數(shù)據(jù)交互量廣播報(bào)文的缺點(diǎn)同一網(wǎng)段的所有主機(jī),無(wú)論是否參與廣播應(yīng)用,都必須完成對(duì)數(shù)據(jù)報(bào)的處理。繁忙的廣播會(huì)嚴(yán)重影響網(wǎng)絡(luò)上其他的主機(jī)多播具有廣播的優(yōu)點(diǎn),又能很好的解決這些問(wèn)題56UDP多播組的加入創(chuàng)建UDP套接字,綁定本地端口如多個(gè)進(jìn)程要在同一端口上發(fā)送和接收數(shù)據(jù),需設(shè)置SO_REUSEADDR設(shè)置多播接口57UDP多播組的加入接收多播數(shù)據(jù)設(shè)置IP_ADD_MEMBERSHIP選項(xiàng)將指定網(wǎng)絡(luò)接口上的套接口加入IP多播組設(shè)置完成后就可以使用recvfrom接收多播數(shù)據(jù)58UDP多播報(bào)文的發(fā)送發(fā)送多播數(shù)據(jù)設(shè)置多播報(bào)文的TTL(默認(rèn)值為1)啟用或禁止多播報(bào)文環(huán)回setsocket(sock,IPPROTO_IP,IP_MULTICAST_LOOP,(char*)&flag,sizeof(flag));使用sendto發(fā)送多播數(shù)據(jù)到多播組地址。59UDP多播組的退出退出多播組60UDP多播編程實(shí)例----接收多播加入多播組,接收多播數(shù)據(jù)61UDP多播編程實(shí)例----發(fā)送多播報(bào)文根據(jù)需要設(shè)置選項(xiàng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論