当前位置: 网学 > 编程文档 > JAVA > 正文

利用UDP Sockets技术实现IP多点传送

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式
上,任何监听该信息的机器都会有机会接收它。对于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 syn
  • 上一篇资讯: Java编程小技巧集锦
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号