Java hỗ trợ truyền thông IP multicast với lớp java.net.MulticastSocket. Việc join vào một nhóm multicast hầu hết đƣợc thực hiện theo cách thiết lập kết nối UDP giữa các trạm. Mỗi trạm muốn liên lạc với các thành viên trong nhóm, nó cần lắng nghe một địa chỉ multicast bằng cách tạo một MulticastSocket và sau đó join vào phiên truyền thông multicast bằng việc gọi phƣơng thức joinGroup() trong lớp MulticastSocket.
Một khi kết nối với một phiên truyền thông multicast đã đƣợc thiết lập, dữ liệu có thể đƣợc gửi tới tất cả các trạm đang lắng nghe trong nhóm bằng cách sử dụng phƣơng thức send trong lớp MulticastSocket.
MulticastSocket ms = new MulticastSocket();
//data là phần dữ liệu cần gửi đi
DatagramPacket dp = new DatagramPacket(data,data.length,ia,port);
//Kết nối vào nhóm multicast với địa chỉ ia thuộc lớp D
ms.joinGroup(ia);
Nguyễn Văn Hưng – D06VT2 69
ms.send(dp);
Trạm cũng có thể nhận dữ liệu đƣợc broadcast trong nhóm multicast.
MulticastSocket ms = new MulticastSocket(port);
//tạo một đối tƣợng DatagramPacket
DatagramPacket dp = new DatagramPacket(data,length);
//Kết nối vào nhóm multicast với địa chỉ ia trùng với địa chỉ của máy gửi
ms.joinGroup(ia);
//nhận dữ liệu
ms.receive(dp);
Một khi không muốn tham gia nhóm nữa , một trạm có thể dừng việc lắng nghe địa chỉ multicast bằng cách sử dụng phƣơng thức leaveGroup(). Phƣơng thức này giúp trạm ngắt kết nối với phiên truyền thông trong nhóm.
ms.leaveGroup(sesAddr);
Để hỗ trợ việc đóng gói dữ liệu gửi đi, java hỗ trợ lớp DatagramPacket. Dƣới đây là một số phƣơng thức thƣờng đƣợc sử dụng để thao tác với dữ liệu gửi/nhận qua lớp MulticastSocket.
public DatagramPacket(byte[] b, int n)
- Là phƣơng thức khởi tạo, cho phép tạo ra một DatagramPacket chứa n bytes dữ liệu đầu tiên của mảng b. (n phải nhỏ hơn chiều dài của mảng b)
- Phƣơng thức trả về một đối tƣợng thuộc lớp DatagramePacket.
public DatagramPacket(byte[] b, int n, InternetAddress ia, int port)
- Phƣơng thức này cho phép tạo một DatagramPacket chứa dữ liệu và cả địa chỉ của máy nhận dữ liệu.
- Phƣơng thức trả về một đối tƣợng thuộc lớp DatagramePacket.