[Java TCP/IP Socket] — 单播、广播、组播(二.程序)

3 篇文章 0 订阅

1.UDP单播的例子

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
 
// 客户端
public class ClientTest
{
    private static final int MAXRECEIVED = 255;
 
    public static void main(String[] args) throws IOException
    {
        byte[] msg = new String("connect test successfully!!!").getBytes();
 
        DatagramSocket client = new DatagramSocket();
 
        InetAddress inetAddr = InetAddress.getLocalHost();
        SocketAddress socketAddr = new InetSocketAddress(inetAddr, 8888);
 
        DatagramPacket sendPacket = new DatagramPacket(msg, msg.length,
                socketAddr);
 
        client.send(sendPacket);
 
        client.close();
    }
}
 
 
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Arrays;
 
//服务端
public class ServerTest
{
    private static final int MAXREV = 255;
 
    public static void main(String[] args) throws IOException
    {
        DatagramSocket server = new DatagramSocket(8888);
        DatagramPacket recvPacket = new DatagramPacket(new byte[MAXREV], MAXREV);
 
        while (true)
        {
            server.receive(recvPacket);
 
            byte[] receiveMsg = Arrays.copyOfRange(recvPacket.getData(),
                    recvPacket.getOffset(),
                    recvPacket.getOffset() + recvPacket.getLength());
 
            System.out.println("Handing at client "
                    + recvPacket.getAddress().getHostName() + " ip "
                    + recvPacket.getAddress().getHostAddress());
 
            System.out.println("Server Receive Data:" + new String(receiveMsg));
 
            server.send(recvPacket);
 
        }
 
    }
}

2.UDP广播的例子

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.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));
        }
 
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值