程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用Visual C++實現局域網IP多播

用Visual C++實現局域網IP多播

編輯:vc教程

  在局域網中,管理員常常需要將某條信息發送給一組用戶。如果使用一對一的發送方法,雖然是可行的,但是過於麻煩,也常會出現漏發、錯發。為了更有效的解決這種組通信問題,出現了一種多播技術(也常稱為組播通信),它是基於IP層的通信技術。為了幫助讀者理解,下面將簡要的介紹一下多播的概念。

  眾所周知,普通IP通信是在一個發送者和一個接收者之間進行的,我們常把它稱為點對點的通信,但對於有些應用,這種點對點的通信模式不能有效地滿足實際應用的需求。例如:一個數字電話會議系統由多個會場組成,當在其中一個會場的參會人發言時,要求其它會場都能即時的得到此發言的內容,這是一個典型的一對多的通信應用,通常把這種一對多的通信稱為多播通信。采用多播通信技術,不僅可以實現一個發送者和多個接收者之間進行通信的功能,而且可以有效減輕網絡通信的負擔,避免資源的無謂浪費。

  廣播也是一種實現一對多數據通信的模式,但廣播與多播在實現方式上有所不同。廣播是將數據從一個工作站發出,局域網內的其他所有工作站都能收到它。這一特征適用於無連接協議,因為LAN上的所有機器都可獲得並處理廣播消息。使用廣播消息的不利之處是每台機器都必須對該消息進行處理。多播通信則不同,數據從一個工作站發出後,如果在其它LAN上的機器上面運行的進程表示對這些數據"有興趣",多播數據才會制給它們。

  本實例由Sender和Receiver兩個程序組成,Sender用戶從控制台上輸入多播發送數據,Receiver端都要求加入同一個多播組,完成接收Sender發送的多播數據。

  一、實現方法

  1、 協議支持

  並不是所有的協議都支持多播通信,對Win32平台而言,僅兩種可從WinSock內訪問的協議(IP/ATM)才提供了對多播通信的支持。因通常通信應用都建立在TCP/IP協議之上的,所以本文只針對IP協議來探討多播通信技術。

  支持多播通信的平台包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4、Windows 2000和WindowsXP。自2.1版開始,Windows CE才開始實現對IP多播的支持。本文實例建立在WindowsXP專業版平台上。

  2、多播地址

  IP采用D類地址來支持多播。每個D類地址代表一組主機。共有28位可用來標識小組。所以可以同時有多達25億個小組。當一個進程向一個D類地址發送分組時,會盡最大的努力將它送給小組的所有成員,但不能保證全部送到。有些成員可能收不到這個分組。舉個例子來說,假定五個節點都想通過I P多播,實現彼此間的通信,它們便可加入同一個組地址。全部加入之後,由一個節點發出的任何數據均會一模一樣地復制一份,發給組內的每個成員,甚至包括始發數據的那個節點。D類I P地址范圍在244.0.0.0到239.255.255.255之間。它分為兩類:永久地址和臨時地址。永久地址是為特殊用途而保留的。比如,244.0.0.0根本沒有使用(也不能使用),244.0.0.1代表子網內的所有系統(主機),而244.0.0.2代表子網內的所有路由器。在RFC 1700文件中,提供了所有保留地址的一個詳細清單。該文件是為特殊用途保留的所有資源的一個列表,大家可以找來作為參考。"Internet分配數字專家組"(I A N A)負責著這個列表的維護。在表1中,我們總結了目前標定為"保留"的一些地址。臨時組地址在使用前必須先創建,一個進程可以要求其主機加入特定的組,它也能要求其主機脫離該組。當主機上的最後一個進程脫離某個組後,該組地址就不再在這台主機中出現。每個主機都要記錄它的進程當前屬於哪個組。 表1 部分永久地址說明

  地 址 說 明

244.0.0.1 基本地址(保留)
244.0.0.1 子網上的所有系統
244.0.0.2 子網上的所有路由器
244.0.0.5 子網上所有OSPF路由器
244.0.0.6 子網上所有指定的OSPF路由器
244.0.0.9 RIP第2版本組地址
244.0.1.1 網絡時間協議
244.0.1.24 WINS服務器組地址

  3、 多播路由器

  多播由特殊的多播路由器來實現,多播路由器同時也可以是普通路由器。各個多播路由器每分鐘發送一個硬件多播信息給子網上的主機(目的地址為244.0.0.1),要求它們報告其進程當前所屬的是哪一組,各主機將它感興趣的D類地址返回。這些詢問和響應分組使用IGMP(Internet group management protocol),它大致類似於ICMP。它只有兩種分組:詢問和響應,都有一個簡單的固定格式,其中有效載荷字段的第一個字段是一些控制信息,第二字段是一個D類地址,在RFC1112中有詳細說明。

  多播路由器的選擇是通過生成樹實現的,每個多播路由器采用修改過的距離矢量協議和其鄰居交換信息,以便向每個路由器為每一組構造一個覆蓋所有組員的生成樹。在修剪生成樹及刪除無關路由器和網絡時,用到了很多優化方法。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved