[Java TCP/IP Socket] ― 单播、广播、组播(二)

2014-11-24 07:48:30 · 作者: · 浏览: 1
t.InetAddress; //客户端 public class BroadcastSender { public static void main(String[] args) throws IOException { byte[] msg = new String("connection successfully!!!").getBytes(); /* * 在Java UDP中单播与广播的代码是相同的,要实现具有广播功能的程序只需要使用广播地址即可, 例如:这里使用了本地的广播地址 */ InetAddress inetAddr = InetAddress.getByName("255.255.255.255"); DatagramSocket client = new DatagramSocket(); DatagramPacket sendPack = new DatagramPacket(msg, msg.length, inetAddr, 8888); client.send(sendPack); System.out.println("Client send msg complete"); client.close(); } } import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.util.Arrays; //服务端 public class BroadcastReceive { public static void main(String[] args) throws IOException { DatagramPacket receive = new DatagramPacket(new byte[1024], 1024); DatagramSocket server = new DatagramSocket(8888); System.out.println("---------------------------------"); System.out.println("Server current start......"); System.out.println("---------------------------------"); while (true) { server.receive(receive); byte[] recvByte = Arrays.copyOfRange(receive.getData(), 0, receive.getLength()); System.out.println("Server receive msg:" + new String(recvByte)); } } }

3.UDP组播的例子

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

//客户端
public class MulticastSender
{
    public static void main(String[] args) throws IOException
    {
        int port = 8888;
        byte[] msg = "Connection successfully!!!".getBytes();

        InetAddress inetRemoteAddr = InetAddress.getByName("224.0.0.5");

        /*
         * Java UDP组播应用程序主要通过MulticastSocket实例进行通信,它是DatagramSocket的是一个子类,
         * 其中包含了一些额外的可以控制多播的属性.
         * 
         * 注意:
         * 
         * 多播数据报包实际上可以通过DatagramSocket发送,只需要简单地指定一个多播地址。
         * 我们这里使用MulticastSocket,是因为它具有DatagramSocket没有的能力
         */
        MulticastSocket client = new MulticastSocket();

        DatagramPacket sendPack = new DatagramPacket(msg, msg.length,
                inetRemoteAddr, port);

        client.send(sendPack);

        System.out.println("Client send msg complete");

        client.close();

    }
}


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

//服务端
public class MulticastReceive
{
    public static void main(String[] args) throws IOException
    {
        InetAddress inetRemoteAddr = InetAddress.getByName("224.0.0.5");

        DatagramPacket recvPack = new DatagramPacket(new byte[1024], 1024);

        MulticastSocket server = new MulticastSocket(8888);

        /*
         * 如果是发送数据报包,可以不加入多播组; 如果是接收数据报包,必须加入多播组; 这里是接收数据报包,所以必须加入多播组;
         */
        server.joinGroup(inetRemoteAddr);

        System.out.println("---------------------------------");
        System.out.println("Server current start......");
        System.out.println("---------------------------------");

        while (true)
        {
            server.receive(recvPack);

            byte[] recvByte = Arrays.copyOfRange(recvPack.getData(), 0,
                    recvPack.getLength());

            System.out.println("Server receive msg:" + new String(recvByte));
        }

    }
}