`
shoren
  • 浏览: 58999 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Java网络编程 MulticastSocket类

阅读更多

应用程序只将数据报包发送给组播地址,路由器将确保包被发送到改组播组中的所有主机。 
组播地址:称为组播组的一组主机所共享的地址。组播地址的范围在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 类的使用 在 Java 网络编程中,MulticastSocket 类是一个非常重要的类,它允许服务器程序将同一信息发送给多个客户端,从而提高了网络传输效率。下面我们将详细介绍 MulticastSocket...

    JAVA网络编程

    Java网络编程 MulticastSocket类的使用 .doc Java网络编程---IO部分学习笔记整理 .doc Java网络编程基础 Datagram类使用方法 (1) .doc Java网络编程基础 InetAddress类的使用.doc Java网络编程基础 ServerSocket类...

    Java网络编程_MulticastSocket类的使用.pdf

    Java网络编程中的多点传送(Multicasting)是一种高效的数据传输方式,尤其适用于广播或者向多个接收者同时发送相同信息的场景。在Java中,MulticastSocket类是实现多点传送功能的关键,它扩展了DatagramSocket类,...

    Java网络编程/Java网络编程实例

    1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过ServerSocket创建服务器端,Socket创建客户端,两者建立连接后可以进行双向数据传输。例如,你可以构建一个简单的聊天应用或文件...

    Java网络编程第三版.pdf

    1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...

    java网络编程 PPT

    同时,也会涉及DatagramSocket和MulticastSocket类,讲解UDP(用户数据报协议)的无连接通信。 3. **输入/输出流**:讲解在Java中如何处理网络数据的发送与接收,包括字节流和字符流,以及缓冲流、对象流和数据流的...

    java网络编程(中文)

    Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,使得Java应用程序能够通过互联网进行数据传输和交互。本教程详细介绍了这一主题,旨在帮助初学者和有一定经验的开发者深入理解Java网络...

    Java网络编程-第三版(中文版).pdf(Elliotte Rusty Harold)

    - **多播**:Java的MulticastSocket类支持IP多播,允许一次性向多个接收者发送数据。 - **网络服务注册与发现**:DNS服务和JNDI(Java Naming and Directory Interface)在Java网络编程中用于查找和注册网络服务。...

    JAVA网络编程学习资料

    在JAVA世界中,网络编程是实现跨机器通信的关键技术,它允许程序通过互联网与其他设备进行交互。本学习资料主要涵盖了以下几个重要知识点: 1. **Socket套接字**: Java中的Socket是网络通信的基础,它提供了低...

    java网络编程实例4

    Java的DatagramSocket和MulticastSocket类用于实现UDP通信。 4. **多线程**:在网络编程中,多线程技术常常用来处理并发连接。例如,服务器可能需要同时处理多个客户端的请求,这就需要使用线程来并发执行任务。...

    Java网络编程(第4版)

    除了基本的TCP套接字,Java还提供了DatagramSocket和MulticastSocket类来支持UDP协议,这是一种无连接的、不可靠的传输方式。DatagramSocket可以发送和接收单个数据包,而MulticastSocket支持多播,允许一个消息同时...

    《Java网络编程》教材附带源代码.

    1. **Java网络API**:Java提供了丰富的网络编程API,如`java.net`包,包含了Socket、ServerSocket、DatagramSocket和MulticastSocket等类,用于实现基于TCP和UDP的网络通信。 2. **套接字(Socket)**:Socket是网络...

    java网络编程精简-孙卫琴

    7. **UDP编程**:与TCP相对应,Java也提供了`DatagramSocket`和`MulticastSocket`类来支持基于UDP的网络通信。UDP是无连接的、不可靠的传输协议,适用于对实时性要求较高的场景。 8. **网络安全**:网络编程中安全...

    基于Java网络编程中组播技术的应用与研究.pdf

    在Java中,组播Socket网络编程可以通过使用MulticastSocket类和DatagramPacket类来实现。首先,需要创建一个MulticastSocket对象,并加入到一个组播组中。然后,可以使用DatagramPacket对象来发送和接收数据。 五、...

    Java网络编程学习资料

    最后,"基础知识—Java的网络功能与编程(1).chm"很可能是对Java网络编程基础知识的概述,包括网络编程模型、URL、URLConnection、DatagramSocket和MulticastSocket等内容。这些是Java提供的基础网络类,用于访问网络...

    java网络编程-孙卫琴 书籍源代码 (17个章节项目)

    6. **接口与类的详解**:书中可能会对与网络编程相关的接口和类进行详细解释,比如ServerSocket、Socket、DatagramSocket、MulticastSocket等,以及相关异常的处理。 7. **并发编程**:在处理网络连接时,多线程和...

    java 网络编程

    此外,Java还提供了InetAddress、DatagramSocket和MulticastSocket等类来支持UDP(用户数据报协议)编程,UDP是一种无连接、不可靠的协议,适用于对实时性要求较高的应用场景,如视频流传输。 总的来说,Java网络...

    Java网络编程(socket---网上广播).rar_Java 网络_Socket网络编程_java socket _ja

    Java网络编程是开发分布式应用程序的关键技术之一,Socket网络编程在其中扮演着至关重要的角色。本教程将深入探讨Java中的Socket编程,特别是如何实现网上广播功能。网上广播允许一个设备向网络上的所有设备发送数据...

Global site tag (gtag.js) - Google Analytics