The MulticastSocket and the DatagramPacket Class

J.E.D.I.

10.2.2 The MulticastSocket and the DatagramPacket Class

The MulticastSocket class is useful for applications that implement group communication. IP addresses for a multicast group lies within the range 224.0.0.0 to 239.255.255.255. However, the address 224.0.0.0 is reserved and should not be used. This class has three constructors but well just consider one of these constructors. MulticastSocket Constructors MulticastSocketint port Creates a multicast socket bound to the given port number. Table 38: MulticastSocket constructor The following table gives the description of some MulticastSocket methods. MulticastSocket Methods public void joinGroupInetAddress mcastaddr Join a multicast group on the specified address. public void leaveGroupInetAddress mcastaddr Leave a multicast group on the specified address. public void sendDatagramPacket p An inherited method from the DatagramSocket class. Sends p from this socket. Table 39: MulticastSocket methods Before one can send a message to a group, one should first be a member of the multicast group by using the joinGroup method. A member can now send messages through the send method. Once youre done talking with the group, you can use the leaveGroup method to relinquish your membership. Before looking at an example of using the MulticastSocket class, lets first have a quick look at the DatagramPacket class. Observe that in the send method of the Introduction to Programming II Page 145 J.E.D.I. MulticastSocket class, the required parameter is a DatagramPacket object. Thus, we need to understand this type of objects before using the send method. The DatagramPacket class is used to deliver data through a connectionless protocol such as a multicast. A problem with this is that the delivery of packets is not guaranteed. Let us now consider two of its six constructors. DatagramPacket Constructors DatagramPacketbyte[] buf, int length Constructs a datagram packet for receiving packets with a length length. length should be less than or equal to the size of the buffer buf. DatagramPacketbyte[] buf, int length, InetAddress address, int port Constructs a datagram packet for sending packets with a length length to the specified port number on the specified host. Table 40: DatagramPacket constructors Here are some interesting methods of the DatagramPacket class. DatagramPacket Methods public byte[] getData Returns the buffer in which data has been stored. public InetAddress getAddress Returns the IP address of the machine where the packet is being sent to or was received from. public int getLength Returns the length of data being sent or received. public int getPort Returns the port number on the remote host where the packet is being sent to or was received from. Table 41: DatagramPacket methods Our multicast example also consists of two classes, a server and a client. The server receives messages from the client and prints out these messages. Here is the server class. import java.net.; public class ChatServer { public static void mainString args[] throws Exception { MulticastSocket server = new MulticastSocket1234; InetAddress group = InetAddress.getByName234.5.6.7; getByName - returns IP address of the given host server.joinGroupgroup; boolean infinite = true; Server continually receives data and prints them whileinfinite { byte buf[] = new byte[1024]; DatagramPacket data = new DatagramPacketbuf, buf.length; server.receivedata; Introduction to Programming II Page 146 J.E.D.I. String msg = new Stringdata.getData.trim; System.out.printlnmsg; } server.close; } } Introduction to Programming II Page 147 J.E.D.I. Here is the client class. import java.net.; import java.io.; public class ChatClient { public static void mainString args[] throws Exception { MulticastSocket chat = new MulticastSocket1234; InetAddress group = InetAddress.getByName234.5.6.7; chat.joinGroupgroup; String msg = ; System.out.printlnType a message for the server:; BufferedReader br = new BufferedReadernew InputStreamReaderSystem.in; msg = br.readLine; DatagramPacket data = new DatagramPacketmsg.getBytes, 0, msg.length, group, 1234; chat.senddata; chat.close; } } Here is a sample run of ChatServer and ChatClient class, assuming that ChatServer was executed before running the client class: Executing ChatServer makes it ready to accept messages from clients Running ChatClient – simply passes message to the server and then terminates Type a message for the server: first chat message to server ChatServer receives message from client and prints this message first chat message to server Running ChatClient again Type a message for the server: second chat message to server ChatServer receives message from client and prints this message second chat message to server Introduction to Programming II Page 148 J.E.D.I. 11 Applets

11.1 Objectives