Java使用MulticastSocket实现多点广播

MulticastSocket可以将数据报以广播的方式发送到多个客户端。

MulticastSocket有如下3个构造方法

public MulticastSocket():使用本机默认地址,随机端口来创建MulticastSocket对象。

public MulticastSocket(int portNumber):使用本机默认地址,指定端口创建MulticastSocket对象。

public MulticastSocket(SocketAddress bindaddr):使用本机指定IP地址,指定端口来创建MulticastSocket对象。

创建MulticastSocket对象后,还炫耀将MulticastSocket加入到指定的多点广播地址,MulticastSocket使用joinGroup()方法加入指定组;使用leaveGroup()方法脱离一个组。

joinGroup(InetAddress addr);

leaveGroup(InetAddress addr);

 

InetAddress 类没有提供构造,而提供如下两个静态方法来获取InetAddress对象

getByName(String host):如getByName("localhost"),getByName(www.baidu.com);

getByAddress(byte []addr):如getByAddress(new byte[]{127,0,0,1});

MulticastSocket类中有一个setTimeToLive(int ttl),当ttl为0时,指定数据报应停留在本地主机,为1时,指定数据报发送到本地局域网网,为32时,发送到本站点的网络上。为64时,发送到本地区,128时,发送到本大洲,255为全球。

 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.Scanner;


public class Test implements Runnable{
	MulticastSocket socket;
	DatagramPacket rece;
	byte []buffer;
	
	public Test()
	{
		try {
			socket=new MulticastSocket(4800);
			InetAddress addr=InetAddress.getByAddress(new byte[]{(byte)230,0,0,1});
			socket.joinGroup(addr);
			buffer=new byte[4000];
			rece=new DatagramPacket(buffer,4000);
			Thread th=new Thread(this);
			th.start();
			Scanner sc=new Scanner(System.in);
			while(sc.hasNextLine())
			{
				DatagramPacket dp=new DatagramPacket(sc.nextLine().getBytes(),sc.nextLine().getBytes().length,addr,4800);
				socket.send(dp);
			}
			
			
			
			
			
			
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new Test();
		
	}

	@Override
	public void run() {
		while(true)
		{
			try {
				socket.receive(rece);
				System.out.println(new String(buffer));
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
		
	}

}


上面的代码能运行,貌似有点问题,不过还是可以通讯,有时间在好好做一做,先做到这里。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值