亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

利用UDPSockets技術實現IP多點傳送

2019-11-18 11:13:27
字體:
來源:轉載
供稿:網友

  ip 多點傳送 MulticastSocket 類IP多點傳送(multicast delivery)是針對點到點的傳送和廣播傳送兩種方式而言的,它是指在一定的組內對其成員進行的廣播,是一種有限的廣播。組中的某個成員發出的信息,組中的其它所有成員都能收到。它是UDP Sockets的一個分支。
  IP多點傳送非凡適合與高帶寬的應用,例如在網絡上發送視頻和音頻。隨著網絡帶寬的不斷提高和網絡通訊質量的不斷改善,IP多點傳送還將廣泛地被應用于網上聊天及網上會議,分布式數據存儲,聯機事務處理,交互式游戲等方面。另外,多點傳送還可以被客戶機用于在網絡上尋找相應的服務器,客戶機發送一個多點傳送的請求,任何監聽服務器都可以與客戶機連接并開始一個事務。
  
  UDP Socket基礎
  使用用戶數據報協議(User Datagram PRotocol,簡稱UDP)進行會話必須將信息裝配成一定尺寸的小報文,當發送一條信息,接收方能否收到并返回信息永遠是不確定的,假如無法收到返回信息,我們就無法確定我們發送的信息是否被接收――它可能在途中丟失,接收者返回的響應信息也可能丟失,另外,接收者也可能忽略我們的信息,因此,UDP被描述為不可靠的、無連接的和面向消息的。
  創建UDP sockets非常象創建一個郵箱。郵箱是使用地址來識別的,但是,我們不需要為每個發送信息的人構造一個新的郵箱,可以在含有發送信息的明信片上寫上目的地址,將其放在郵箱中并發送出去。接收者可能會長久的等待,直到含有信息的明信片到達它的郵箱,而明信片上標識了發送者的返回地址。
  
  IP多點傳送的原理
  為了支持IP多點傳送,某些范圍的IP地址被單獨留出專門用于這個目的,這些IP地址是D類地址,其地址的最高四比特的位模式為“1110”,即IP地址的范圍在224.0.0.0和239.255.255.255之間。它們中的每一個IP地址都可以被引用作為一個多點傳送組,任何以該IP地址編址的IP報文將被該組中的其它所有機器接收,也就是說,一個IP地址就相當于一個郵箱。另外,組中的成員是動態的并隨時間而改變。
  對于IP多點傳送,網間網組治理協議(Internet Group Management Protocol,簡稱IGMP),用于治理多點傳送組中的成員。支持多點傳送的路由可以使用IGMP決定本地的機器是否贊成加入某個組,一個多點傳送路由可以決定是否轉發一個多點傳送報文。
  影響多點傳送報文的一個重要參數是time-to-live(TTL)。TTL用于描述發送者希望傳送的信息能通過多少不同的網絡。當報文被路由器轉發,報文中的TTL將減一,當TTL為零時,報文將不再向前發送。
  
  在實際使用中,我們必須注重下面幾點:
  1.這些IP地址只能作為信宿地址使用,絕對不能出現在任何信源地址域中,也不能出現在源路徑或記錄路徑選項中:
  2.由于IP多點傳送是一對多的傳送,因此,不能利用差錯與控制報文協議(Internet Control Message Protocol,簡稱ICMP)產生出錯報文。
  3.發送一個信息到一個組,發送主機可以不是組中的成員;
  4.一些組被Internet Assigned Numbers Authority(IANA)分配,保留用于非凡的目的,詳情參見:FTP://ftp.internic.net/rfc/rfc1700.txt。另外,避免使用一些保留組,從224.0.0.0到224.0.0.225僅限于本地子網使用。建議在224.0.1.27和224.0.1.225之間任意選取一個IP地址。
  5.假如我們選取的組已經被使用,與其他機器的通訊將會混亂,一旦發生,可以退出應用,試試其他的地址。
  6.當一個機器加入一個多點傳送組,它將開始接收該IP多點傳送地址的信息。假如多點傳送報文分發到網絡上,任何監聽該信息的機器都會有機會接收它。對于IP多點傳送,沒有一個機制對相同網絡上的機器能否加入該多點傳送組加以限制。因此,安全性是我們必須考慮的問題之一。
  7.選擇的TTL參數應盡可能小。一個大的TTL值會不必要地占用Internet帶寬。此外,還可能破壞不同區域使用相同組的其它的多點傳送通訊。
  
  java中與IP多點傳送相關的類
  java.net包中含有UDP通訊所需要的工具,其中包括IP多點傳送。
  
  DatagramPacket類
  我們可以使用DatagramPacket類創建一個用于發送的數據報,而當接收UDP數據報時,可以使用DatagramPacket類讀取數據報中的數據,發送者及其它信息。
  為了創建一個數據報并發送到遠地系統,可以使用下面的構造器:
  Public DatagramPacket(byte ibuf,int length,InetAddress iaddr,int iport,);
  ibuf是編碼信息數據的字節數組,它的長度length就是數據報放在其中的字節數組的長度,iaddr是一個InetAddress對象,存儲著接收方的主機名和IP地址等信息,iport標識數據報發送到接收主機的端口。
  
  為了接收數據報,必須使用DatagramPacket構造器,其原型為:public DatagramPacket(byte ibuf,int ilength);ibuf是指接收的數據報的數據部分, ilength是該部分數據的長度。假如 ilength 小于機器接收的UDP數據報的尺寸,多余的字節將被Java忽略。
  另外,類中有一些方法(method)可以讓我們得到一些相關的信息:
  public int getLength(); //得到數據報中數據塊的字節尺寸
  public bytegetData();//得到接收數據報中的數據
  public InetAddress getAddress(); //為發送者提供一個 InetAddress對象
  public int getPort(); //得到UDP端口
  
  值得注重的是,TCP sockets的編程中,我們無須將傳送的數據分塊,然而,當我們創建一個基于UDP的網絡通訊應用程序時,必須創建一套方法,在運行時刻決定需分割的數據報的長度。對于TCP/IP,最大的數據報可以含有65507字節的數據,然而,主機僅能接收最多548字節的數據,支持8192字節的大數據報的平臺是利用IP層對數據報進行分割的。假如在傳送期間,任何含有IP報文的一個數據塊丟失,都會造成整個UDP數據報的丟失,因此,我們在確定應用中數據報尺寸時,對其尺寸的合理性一定要謹慎。
  下面就是分割數據的一個例子:
  //循環地從輸入流input中讀一行數據
  while((nextLine=input.readLine())!=null){
  //定義一個空數據報,其尺寸為512
  mcastBuffer=new byte[512];
  //假如讀入的數據的長度大于定義的數據報的長度,
  //則使用定義的長度,否則使用讀入數據的長度
  if(nextLine.length()>mcastBuffer.length){
  sendLength=mcastBuffer.length;
  }else {
  sendLenth=nextLine.length();
  }
  //將讀入的數據轉換為byte類型
  lineData=nextLine.getBytes();
  //將數據復制到用于創建數據報的byte數組
  for(int i=0;i   mcastBuffer[i]=lineData[i];
  }
  ……創建數據報,發送或接收……
  }
  
  MulticastSocket類
  Java的 MulticastSocket類是實施IP多點傳送網絡特征的要害,它答應我們使用多點傳送IP發送或接收UDP數據報。 MulticastSocket的構造器為:
  public MulticastSocket () throws IOException;  //創建一個多點傳送socket
  public MulticastSocket(int port)throws IOException;//在指定端口創建一個多點傳送socket
  另外,類中其它常用的方法有:
  public void joinGroup(InetAddress mcastaddr)throws IOException{} //加入多點傳送組
  public void leaveGroup(InetAddress mcastaddr)throws IOException{} //離開多點傳送組
  public synchronized void send(DatagramPacket p,byte ttl) throws IOException{} //發送數據報
  public synchronized void receive(DatagramPacket p,byte ttl) throws IOException{}  //接收數據報
  創建一個DatagramPacket對象之后,我們必須相應地創建一個 MulticastSocket對象,這樣,數據報就可以使用send()方法發送了。下面的代碼演示了如何創建 MulticastSocket、發送和接收IP多點傳送數據報:
  int multiPort=2345; //定義端口號,非超級用戶應使用1024以上的端口
  int ttl=1; //設定TTL值
  InetAddress multiAddr=InetAddress.getByName(″224.0.1.100″); //設定多點傳送IP
  byteSmultiBytes={'H','e','1','1','O'}; //定義一個內容為“Hello”的數據報
  //創建多點傳送數據報
  DatagramPacket SmultiDatagram new Datagram Packet(SmultiBytes,SmultiBytes,length,multiAddr,multiPort);
  MulticastSocket multiSocket=new MulticastSocket();  //創建多點傳送socket
  multiSocket.send(SmultiDatagram,ttl); //發送數據報(不加入到組中)
  ……
  byteRmultiBytes=new byte[256]; //定義一個空數據報,長度為256字節
  //創建接收數據報
  DatagramPacket RmultiDatagram=new DatagramPacket(RmultiBytes,RmultiBytes.length);
  multiSocket.joinGroup(multiAddr); //加入到多點傳送組中
  multiSocket.receive(RmultiDatagram);//接收UDP數據報
  
  ……
  multiSocket.leaveGroup(multiAddr); //離開多點傳送組
  multiSocket.close();  //關閉多點傳送 socket
  當調用joinGroup()方法時,機器將關注沿著網絡傳送屬于特定多點傳送組的任何IP報文,也就是說,機器擁有了一個郵箱。主機還應使用IGMP相應地報告組的使用。對于多IP地址的機器,應配置數據報發送的接口:setInterface(oneOfMyLocalAddrs);
  在DatagramSocket中沒有類似 setSo Timeout()的方法設置超時。
  
  IP多點傳送應用程序的開發流程
  由于IP多點傳送主要用于同組中成員的交流,因此,應用程序的開發流程大體如下:
  1.創建一個需發送的按規定編址的數據報DatagramPacket;<

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女视频中文字幕| 91av视频在线观看| 色综合久久悠悠| 91久久国产婷婷一区二区| 97视频在线观看视频免费视频| 欧美午夜www高清视频| 久久精品美女视频网站| 国产成人精品久久二区二区| 一级做a爰片久久毛片美女图片| 欧美人成在线视频| 蜜臀久久99精品久久久久久宅男| 国产日韩欧美视频在线| 成人信息集中地欧美| 国产精品一区二区av影院萌芽| 中文字幕亚洲一区二区三区五十路| 91欧美精品午夜性色福利在线| 久久久久国产一区二区三区| 日本午夜精品理论片a级appf发布| 欧美日本中文字幕| 国产做受高潮69| 色综合色综合久久综合频道88| 国产精品美女www爽爽爽视频| 8090理伦午夜在线电影| 国产精品高清免费在线观看| 中文字幕亚洲无线码a| 精品国产福利视频| 亚洲欧美激情一区| 亚洲欧美另类在线观看| 欧美日在线观看| 国产精品自产拍在线观看| 日韩二区三区在线| 色老头一区二区三区在线观看| 欧美理论片在线观看| 日本精品久久久久影院| 亚洲视频日韩精品| 久久精品99无色码中文字幕| 国产精品欧美激情| 国产精品aaaa| 亚洲一区制服诱惑| 中文字幕在线视频日韩| 亚洲精品国产suv| 国产精品久久久久久久久久久久久久| 国产日韩中文在线| 欧美xxxwww| 91香蕉嫩草神马影院在线观看| 日韩在线视频二区| 欧美另类在线播放| 91网在线免费观看| 亚洲石原莉奈一区二区在线观看| 98精品国产高清在线xxxx天堂| 日韩av综合网站| 国内精品久久久久久久| 国产色综合天天综合网| 蜜臀久久99精品久久久无需会员| 91精品国产色综合| 久久久久久久久国产精品| 久久伊人精品视频| 国产欧美精品一区二区三区-老狼| 97视频色精品| 亚洲电影免费观看高清完整版在线观看| 欧美午夜女人视频在线| 狠狠色噜噜狠狠狠狠97| 国产精品色婷婷视频| 亚洲免费视频在线观看| 欧美日产国产成人免费图片| 久久久国产成人精品| 亚洲奶大毛多的老太婆| 国产999精品视频| 久久人人爽人人爽爽久久| 亚洲第一男人av| 亚洲欧美日韩直播| 成人午夜两性视频| 亚洲女在线观看| 欧美激情中文字幕在线| 日韩在线视频网站| 69视频在线免费观看| 亚洲国产又黄又爽女人高潮的| 久久躁狠狠躁夜夜爽| 日本伊人精品一区二区三区介绍| 国产a∨精品一区二区三区不卡| 国产玖玖精品视频| 在线中文字幕日韩| 91精品国产高清久久久久久| 欧美高清在线视频观看不卡| 97视频在线观看亚洲| 最新91在线视频| 福利一区视频在线观看| 高清欧美性猛交xxxx| 亚洲一区二区黄| 亚洲黄色www网站| 欧美电影免费观看高清| 日韩免费在线电影| 欧美高清视频免费观看| 国产免费一区二区三区在线观看| 欧美在线亚洲一区| 91麻豆国产语对白在线观看| 亚洲欧美中文日韩v在线观看| 国产亚洲精品一区二区| 亚洲欧美中文日韩在线v日本| 久久久黄色av| 久久视频在线直播| 欧美贵妇videos办公室| 久久久久久久国产精品| 欧美一级视频免费在线观看| 国产成人鲁鲁免费视频a| 亚洲影视九九影院在线观看| 亚洲精品福利视频| 91高清视频免费观看| 国产精品入口免费视频一| 色哟哟入口国产精品| 精品日本高清在线播放| 日韩欧美中文字幕在线播放| 成人xvideos免费视频| 日韩av电影在线免费播放| 欧美大学生性色视频| 欧美日韩另类字幕中文| 色婷婷av一区二区三区久久| 欧美国产激情18| 国产精品直播网红| 久久精品一本久久99精品| 日韩精品视频在线免费观看| 亚洲人午夜色婷婷| 欧美性jizz18性欧美| 国产精品久久视频| 精品国产福利视频| 97在线观看视频| 欧美性猛交xxxx乱大交3| 两个人的视频www国产精品| 国产精品免费观看在线| 欧美日本在线视频中文字字幕| 国产亚洲人成a一在线v站| 亚洲欧美日韩综合| 久久精品国产电影| 欧美在线视频免费观看| 精品久久久免费| 国产精品尤物福利片在线观看| 成人久久一区二区| 日韩黄色高清视频| 亚洲精品短视频| 日韩中文字幕在线观看| 136fldh精品导航福利| 欧美性猛交xxxx免费看| 日本久久久久久| 亚洲午夜av久久乱码| 成人一区二区电影| 国产一区二区三区中文| 欧美亚洲激情在线| 日韩有码片在线观看| 91九色单男在线观看| 欧美日产国产成人免费图片| 国产激情999| 最近2019年手机中文字幕| 色偷偷噜噜噜亚洲男人的天堂| 国产99视频精品免视看7| 欧美性猛交视频| 欧美大片免费观看在线观看网站推荐| 日韩欧美在线观看视频| 国产成人在线视频| 久久久久久久久久久亚洲| 国产精品一区二区久久国产| 久久99精品久久久久久噜噜| 亚洲mm色国产网站| 午夜精品福利视频| 欧美激情亚洲另类|