应用程序只将数据报包发送给组播地址,路由器将确保包被发送到改组播组中的所有主机。
组播地址:称为组播组的一组主机所共享的地址。组播地址的范围在224.0.0.0---
239.255.255.255之间(都为D类地址 1110开头)。
package test;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.Scanner;
//让该类实现Runnable接口,该类的实例可作为线程的target
public class MulticastSocketTest implements Runnable
{
//使用常量作为本程序的多点广播IP地址
private static final String BROADCAST_IP = "230.0.1.1";
//使用常量作为本程序的多点广播目的的端口
public static final int BROADCAST_PORT = 30000;
//定义每个数据报的最大大小为4K
private static final int DATA_LEN = 4096;
//定义本程序的MulticastSocket实例
private MulticastSocket socket = null;
private InetAddress broadcastAddress = null;
private Scanner scan = null;
//定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
//以指定字节数组创建准备接受数据的DatagramPacket对象
private DatagramPacket inPacket = new DatagramPacket(inBuff , inBuff.length);
//定义一个用于发送的DatagramPacket对象
private DatagramPacket outPacket = null;
public void init()throws IOException
{
try
{
//创建用于发送、接收数据的MulticastSocket对象
//因为该MulticastSocket对象需要接收,所以有指定端口
socket = new MulticastSocket(BROADCAST_PORT);
broadcastAddress = InetAddress.getByName(BROADCAST_IP);
//将该socket加入指定的多点广播地址
socket.joinGroup(broadcastAddress);
//设置本MulticastSocket发送的数据报被回送到自身
socket.setLoopbackMode(false);
//初始化发送用的DatagramSocket,它包含一个长度为0的字节数组
outPacket = new DatagramPacket(new byte[0] , 0 ,
broadcastAddress , BROADCAST_PORT);
//启动以本实例的run()方法作为线程体的线程
new Thread(this).start();
//创建键盘输入流
scan = new Scanner(System.in);
//不断读取键盘输入
while(scan.hasNextLine())
{
//将键盘输入的一行字符串转换字节数组
byte[] buff = scan.nextLine().getBytes();
//设置发送用的DatagramPacket里的字节数据
outPacket.setData(buff);
//发送数据报
socket.send(outPacket);
}
}
finally
{
socket.close();
}
}
public void run()
{
try
{
while(true)
{
//读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
socket.receive(inPacket);
//打印输出从socket中读取的内容
System.out.println("test聊天信息:" + new String(inBuff , 0 ,
inPacket.getLength()));
}
}
//捕捉异常
catch (IOException ex)
{
ex.printStackTrace();
try
{
if (socket != null)
{
//让该Socket离开该多点IP广播地址
socket.leaveGroup(broadcastAddress);
//关闭该Socket对象
socket.close();
}
System.exit(1);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
throws IOException
{
new MulticastSocketTest().init();
}
}
一个主机可以加入多个组播组,用joinGroup函数,但是要注意,应为每一个组播地址设置一个outPacket。这样才能将数据包发送到连接的各个组播,否则,只能接受所有的组播内容,而不能将内容发送到所有的组播组。
参考:使用MulticastSocket实现多点广播
分享到:
相关推荐
Java 网络编程_MulticastSocket 类的使用 在 Java 网络编程中,MulticastSocket 类是一个非常重要的类,它允许服务器程序将同一信息发送给多个客户端,从而提高了网络传输效率。下面我们将详细介绍 MulticastSocket...
Java网络编程 MulticastSocket类的使用 .doc Java网络编程---IO部分学习笔记整理 .doc Java网络编程基础 Datagram类使用方法 (1) .doc Java网络编程基础 InetAddress类的使用.doc Java网络编程基础 ServerSocket类...
Java网络编程中的多点传送(Multicasting)是一种高效的数据传输方式,尤其适用于广播或者向多个接收者同时发送相同信息的场景。在Java中,MulticastSocket类是实现多点传送功能的关键,它扩展了DatagramSocket类,...
1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过ServerSocket创建服务器端,Socket创建客户端,两者建立连接后可以进行双向数据传输。例如,你可以构建一个简单的聊天应用或文件...
1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...
同时,也会涉及DatagramSocket和MulticastSocket类,讲解UDP(用户数据报协议)的无连接通信。 3. **输入/输出流**:讲解在Java中如何处理网络数据的发送与接收,包括字节流和字符流,以及缓冲流、对象流和数据流的...
Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,使得Java应用程序能够通过互联网进行数据传输和交互。本教程详细介绍了这一主题,旨在帮助初学者和有一定经验的开发者深入理解Java网络...
- **多播**:Java的MulticastSocket类支持IP多播,允许一次性向多个接收者发送数据。 - **网络服务注册与发现**:DNS服务和JNDI(Java Naming and Directory Interface)在Java网络编程中用于查找和注册网络服务。...
在JAVA世界中,网络编程是实现跨机器通信的关键技术,它允许程序通过互联网与其他设备进行交互。本学习资料主要涵盖了以下几个重要知识点: 1. **Socket套接字**: Java中的Socket是网络通信的基础,它提供了低...
Java的DatagramSocket和MulticastSocket类用于实现UDP通信。 4. **多线程**:在网络编程中,多线程技术常常用来处理并发连接。例如,服务器可能需要同时处理多个客户端的请求,这就需要使用线程来并发执行任务。...
除了基本的TCP套接字,Java还提供了DatagramSocket和MulticastSocket类来支持UDP协议,这是一种无连接的、不可靠的传输方式。DatagramSocket可以发送和接收单个数据包,而MulticastSocket支持多播,允许一个消息同时...
1. **Java网络API**:Java提供了丰富的网络编程API,如`java.net`包,包含了Socket、ServerSocket、DatagramSocket和MulticastSocket等类,用于实现基于TCP和UDP的网络通信。 2. **套接字(Socket)**:Socket是网络...
7. **UDP编程**:与TCP相对应,Java也提供了`DatagramSocket`和`MulticastSocket`类来支持基于UDP的网络通信。UDP是无连接的、不可靠的传输协议,适用于对实时性要求较高的场景。 8. **网络安全**:网络编程中安全...
在Java中,组播Socket网络编程可以通过使用MulticastSocket类和DatagramPacket类来实现。首先,需要创建一个MulticastSocket对象,并加入到一个组播组中。然后,可以使用DatagramPacket对象来发送和接收数据。 五、...
最后,"基础知识—Java的网络功能与编程(1).chm"很可能是对Java网络编程基础知识的概述,包括网络编程模型、URL、URLConnection、DatagramSocket和MulticastSocket等内容。这些是Java提供的基础网络类,用于访问网络...
6. **接口与类的详解**:书中可能会对与网络编程相关的接口和类进行详细解释,比如ServerSocket、Socket、DatagramSocket、MulticastSocket等,以及相关异常的处理。 7. **并发编程**:在处理网络连接时,多线程和...
此外,Java还提供了InetAddress、DatagramSocket和MulticastSocket等类来支持UDP(用户数据报协议)编程,UDP是一种无连接、不可靠的协议,适用于对实时性要求较高的应用场景,如视频流传输。 总的来说,Java网络...
Java网络编程是开发分布式应用程序的关键技术之一,Socket网络编程在其中扮演着至关重要的角色。本教程将深入探讨Java中的Socket编程,特别是如何实现网上广播功能。网上广播允许一个设备向网络上的所有设备发送数据...