二、
制作多点发送应用程序
![]()
下面就运用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
" + " /n/t can be one of 224.x.x.x " + "- 239.x.x.x/n");
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:/t" + 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.
}
}进入讨论组讨论。