快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰游戏881_龟发之家论坛



IP协议是Internet上所有信息的传播手段,UDP(User Datagram Protocol,用户数据报协议)数据报被封装在IP包中,发送到收集上适当的机械。众所周知,大年夜多半IP应用单点发送,即从一个主机发送一个包到另一个主机上。然而,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时,指澳门新葡亰游戏881定命据包应停顿在本地主机;当TTL的值为1时,指定命据包发送到本地收集;当TTL的值为32时,意味着只应发送到本站点的收集上;当TTL为64时,意味着数据包应保留在本地区;当TTL的值为128时,意味着数据应保留在今大年夜洲;当TTL为255时,意味着数据包应发送到所有地方;若应用缺省的send措施时,TTL的值为1。

二、制作多点发送利用法度榜样

下面就运用Java制作一个多点发送利用法度榜样。此中法度榜样1(MulticastCastSender.java)是一个发送数据报到一个指定多点发送IP地址的法度榜样,该法度榜样运行时应用两个参数:第一个指定发送数据报的多点发送IP地址,另一个则指定侦听利用法度榜样的UDP端口。此中Main()措施包管了这些参数收到后,实例化一个MultiCastSender澳门新葡亰游戏881工具。别的,构造器应用多点发送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.澳门新葡亰游戏881exit(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 longe澳门新葡亰游戏881r 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 java MultiCastSender225.2.32.6 1111

Here is just to test multicast message.

Sending: Here is just to test multicast message.

Do you received it?

Sending: Do you received it?

要接管这些报文,应在一个或多个系统上运行MultiCastReceiver利用法度榜样,这些系统应该加入同一个多点发送组225.2.32.6,并在相同的端口1111上侦听:

-/class ->java MultiCastReceiver 225.2.32.6 1111

Received from 225.106.36澳门新葡亰游戏881.32 on port 32911: Here is just to test multicast message.

Received from 225.106.36.32 on port 32911: Do you received it?

您可能还会对下面的文章感兴趣: