udp多播的发送与接收

VoteMulticastSender.java
package com.tcpip;

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

/**
 * 多播的发送者
 * @author Administrator
 *
 */
public class VoteMulticastSender {
	
	public static final int CANDIDATE = 475;

	public static void main(String[] args) throws IOException{
		//IPv4的多播地址范围是:224.0.0.0--239.255.255.255
		args = new String[]{"224.0.0.1","9999","100"};

		InetAddress destAddr = InetAddress.getByName(args[0]);
		if(!destAddr.isMulticastAddress()){
			throw new IllegalArgumentException("Not a multicast address");
		}
		
		int destPort = Integer.parseInt(args[1]);
		int TTL = (args.length==3)?Integer.parseInt(args[2]):1;
		
		MulticastSocket sock = new MulticastSocket();
		sock.setTimeToLive(TTL);
		
		VoteMsgCoder coder = new VoteMsgTextCoder();
		
		VoteMsg vote = new VoteMsg(true,true,CANDIDATE,1000001L);
		
		byte[] msg = coder.toWire(vote);
		
		DatagramPacket message = new DatagramPacket(msg,msg.length,destAddr,destPort);
		System.out.println("Sending Text-Encoded Request ("+msg.length+ " bytes):");
		System.out.println(vote);
		
		sock.send(message);
		
		sock.close();
	}

}


VoteMulticastReceiver.java:

package com.tcpip;

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

import org.bouncycastle.util.Arrays;

/**
 * 多播的接收者,可多次运行,则当前多播组里有多个成员
 * @author Administrator
 *
 */
public class VoteMulticastReceiver {

	public static void main(String[] args) throws IOException{
		args = new String[]{"224.0.0.1","9999"};
		
		InetAddress address = InetAddress.getByName(args[0]);
		if(!address.isMulticastAddress()){
			throw new IllegalArgumentException("Not a multicast address");
		}
		
		int port = Integer.parseInt(args[1]);
		MulticastSocket sock = new MulticastSocket(port);
		sock.joinGroup(address);
		
		VoteMsgTextCoder coder = new VoteMsgTextCoder();
		
		DatagramPacket packet = new DatagramPacket(new byte[VoteMsgTextCoder.MAX_WIRE_LENGTH],VoteMsgTextCoder.MAX_WIRE_LENGTH);
		sock.receive(packet);
		
		VoteMsg vote = coder.fromWire(Arrays.copyOfRange(packet.getData(), 0, packet.getLength()));
		
		System.out.println("Received Text-Encoded Request ("+packet.getLength() + " bytes ):");
		System.out.println(vote);
		
		sock.close();
	}

}


转载于:https://my.oschina.net/u/2552902/blog/543971

猜你喜欢

转载自blog.csdn.net/weixin_34388207/article/details/92326809
今日推荐