使用Java制作多点发送程序

和蔼的晴儿zq

和蔼的晴儿zq

2016-02-19 15:58

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的使用Java制作多点发送程序懂设计的网友们快点来了解吧!

  IP协议是Internet上所有信息的传播手段,UDP(User Datagram Protocol,用户数据报协议)数据报被封装在IP包中,发送到网络上适当的机器。众所周知,大多数IP使用单点发送,即从一个主机发送一个包到另一个主机上。 !-- frame contents -- !-- /frame contents -- 然而,IP协议也具有多点发送的能力,若要使用多点发送时,一个报文标有一组目标主机地址,当报文发出后,整个组都能收到。为支持多点发送,一定范围的IP地址被单独划分出来。这些IP地址是D类地址,其范围是224.0.0.0至239.255.255.255。
  
   IP多点发送(或多点广播)是一种相当新的技术,它是对简单广播的改进。多点广播功能类似于一个单一信息发送到多个接收者的广播,但仅发送给那些等待它的接收者。其思想就是设置一组网络地址作为多点广播地址,其范围是225.0.0.0到239.255.255.255。每一个多点广播地址都被看作一个组。当用户需要从某个地址信息时,加入到该组即可。例如,可能为其股票报价系统设置了地址225.23.32.36作为多点广播地址,假如一个想要接收股票查询报价程序,必须加入到225.23.32.36组中。
  
  制作多点发送的基本知识
  
  在使用Java进行多点发送时,它的MulticastSocket类是实现这一功能的要害。MulticastSocket类答应用户发送和接收使用多点发送IP的数据报。若要发送或接收多点广播数据,必须首先创建一个多点广播套接字(多点广播套接字类似于数据报套接字,事实上MulticastSocket是DatagramSocket的一个子类)。若要发送一个数据报时,可使用缺省的端口号创建多点广播套接字,也可以在构造器指定端口号来创建多点广播套接字:
  
  public MulticastSocket()throws IOException
  
  public MulticastSocket(int portNumber)throws IOException
  
  要加入到一个多点广播地址,可使用jionGroup方法;若要脱离一个组,相使用leaveGroup方法:
  
  public void jionGroup(InetAddress multicastAddr)throws IOException
  
  public void leaveGroup(InetAddress multicastAddr)throws IOException
  
  在某些系统中,可能有多重网络接口。这可能会对多点广播带来问题,因为用户需要在一个指定的接口上侦听,通过调用setInterface可选择多点广播套接字所使用的接口:
  
  public void setInterface(InetAddress interface)throws SocketException
  
  通过调用getInterface方法可查询多点广播套接字的接口:
  
  public InetAddress getInterface()throws SocketException
  
  用户在发送多点发送的数据时,使用send方法:
  
  public synchronized void send(DatagramPacket packet, byte timeTolive)throws IOException
  
  其中TTL值指定了数据包应该跨过多少个网络,当TTL为0时,指定数据包应停留在本地主机;当TTL的值为1时,指定数据包发送到本地网络;当TTL的值为32时,意味着只应发送到本站点的网络上;当TTL为64时,意味着数据包应保留在本地区;当TTL的值为128时,意味着数据应保留在本大洲;当TTL为255时,意味着数据包应发送到所有地方;若使用缺省的send方法时,TTL的值为1。进入讨论组讨论。
  制作多点发送应用程序
  
   !-- frame contents -- !-- /frame contents --   下面就运用Java制作一个多点发送应用程序。其中程序1(MulticastCastSender.java)是一个发送数据报到一个指定多点发送IP地址的程序,该程序运行时使用两个参数:第一个指定发送数据报的多点发送IP地址,另一个则指定侦听应用程序的UDP端口。其中Main()方法保证了这些参数收到后,实例化一个MultiCastSender对象。另外,构造器使用多点发送IP地址的String对象,创建一个InetAddress实例,然后再在动态分配的端口上为发送数据报创建一个MulticastSocket,然后构造器进入一个while循环,从标准输入上逐入。该程序将每一行的前512个字节包装到一标有地址的DatagramPacket中,并通过MulticastSocket发送该数据报。
  
  其中程序MultiCastSender.java的源代码如下:
  
  import java.net.*; // Import package names used.
  
  import java.io.*;
  
  class MultiCastSender {
  
  private static final byte TTL = 1;
  
  private static final int DATAGRAM_BYTES = 1024;
  
  private int mulcastPort;
  
  private InetAddress mulcastIP;
  
  private BufferedReader input;
  
  private MulticastSocket mulcastSocket;
  
  public static void main(String[] args) {
  
   // This must be the same port and IP address used by the receivers.
  
   if (args.length != 2) {
  
  System.out.print("Usage: MultiCastSender " + "    can be one of 224.x.x.x " + "- 239.x.x.x");
  
  System.exit(1);
  
  }
  
  MultiCastSender send = new MultiCastSender(args);
  
  System.exit(0);
  
   }
  
  public MultiCastSender(String[] args) {
  
  DatagramPacket mulcastPacket; // UDP datagram.
  
  String nextLine; // Line from STDIN.
  
  byte[] mulcastBuffer; file:// Buffer for datagram.
  
  byte[] lineData; // The data typed in.
  
  int sendLength; file:// Length of line.
  
  input = new BufferedReader(new InputStreamReader(System.in));
  
  try {
  
  // Create a multicasting socket.
  
  mulcastIP = InetAddress.getByName(args[0]);
  
  mulcastPort = Integer.parseInt(args[1]);
  
  mulcastSocket = new MulticastSocket();
  
  } catch(UnknownHostException excpt) {
  
   System.err.println("Unknown address: " + excpt);
  
   System.exit(1);
  
   } catch(IOException excpt) {
  
   System.err.println("Unable to oBTain socket: " + excpt);
  
   System.exit(1);
  
   }
  
   try {
  
   file:// Loop and read lines from standard input.
  
   while ((nextLine = input.readLine()) != null) {
  
   mulcastBuffer = new byte[DATAGRAM_BYTES];
  
   file:// If line is longer than your buffer, use the length of the buffer available.
  
   if (nextLine.length() mulcastBuffer.length) {
  
  endLength = mulcastBuffer.length;
  
  // Otherwise, use the line's length.
  
    }
   else {
  
  sendLength = nextLine.length();
  
   }
  
   // Convert the line of input to bytes.
  
   lineData = nextLine.getBytes();
  
   // Copy the data into the blank byte array
   file://which you will use to create the DatagramPacket.
  
   for (int i = 0; i sendLength; i++) {
  
   mulcastBuffer[i] = lineData[i];
  
  }
  
   mulcastPacket=new DatagramPacket (mulcastBuffer, mulcastBuffer.length,      mulcastIP, mulcastPort);
  
   // Send the datagram.
  
  try {
  
  System.out.println("Sending:" + nextLine);
  
  mulcastSocket.send(mulcastPacket,TTL);
  
  } catch(IOException excpt) {
  
  System.err.println("Unable to send packet: " + excpt);
  
  }
  
  }
  
   } catch(IOException excpt) {
  
   System.err.println("Failed I/O: " + excpt);
  
   }
  
   mulcastSocket.close(); file:// Close the socket.
  
   }
  
    }进入讨论组讨论。
展开更多 50%)
分享

猜你喜欢

使用Java制作多点发送程序

编程语言 网络编程
使用Java制作多点发送程序

JAVA程序实现监视----JAVA程序内存使用情况

编程语言 网络编程
JAVA程序实现监视----JAVA程序内存使用情况

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

短信发送程序

ASP
短信发送程序

如何使用Java编写多线程程序

编程语言 网络编程
如何使用Java编写多线程程序

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java邮件发送程序(可以同时发给多个地址、可以带附件)

编程语言 网络编程
Java邮件发送程序(可以同时发给多个地址、可以带附件)

怎么用使用Photgoshop软件制作多彩花朵

PS PS教程
怎么用使用Photgoshop软件制作多彩花朵

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

jQuery 插件开发 其实很简单

jQuery 插件开发 其实很简单

秉承Java思路 开发易于移植的J2ME游戏

秉承Java思路 开发易于移植的J2ME游戏
下拉加载更多内容 ↓