Java网络通信编程-UDP

1.对于TCP和UDP主要是两种不同的协议,前者是“面向连接”,“安全可靠”,“不限制大小,大数据传输”,‘效率低’,后者是“面向无连接”,“速度快”,“不安全,不可靠”,“限制大小在64K”,“效率高”。

2.端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口。

3.使用UDP主要涉及的对象有DatagramSocket,DatagramPacket,InetAddress。下面是UDP案例,代码如下:

client端:

package com.net;

import java.io.IOException;
import java.net.*;

/** UDP通信-client
 * Created by lichangyun on 2020/7/17.
 */
public class UdpClient {
    public static void main(String[] args) throws SocketException, UnknownHostException {

//        创建DatagramSocket
        DatagramSocket ds=new DatagramSocket();

//        创建DatagramPacket,打包
        String msg="我爱编程!";
        byte[] bytes = msg.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port=1000;

        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);

        try {
//        建立联系
            ds.send(dp);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            ds.close();
        }
    }
}

server端:

package com.net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**UDP-server
 * Created by lichangyun on 2020/7/20.
 */
public class UdpServer {
    public static void main(String[] args) throws IOException {

//        创建服务端对象
        DatagramSocket  ds= new DatagramSocket(1000);

//        创建包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

//        接受客户端的数据
        ds.receive(dp);

//        打印到控制台
        System.out.println("接受到的数据:   "+new String(bytes,0,bytes.length));
//        释放资源
        ds.close();

    }
}

 下面来看看组播的代码实现,组播地址:224.0.0.0.-239.255.255.255,其中224.0.0.0.-224.0.0.255为预留的组播地址。涉及到组播的客户端步骤如下:

1.创建发送端DatagramSocket对象

2.创建数据,并把数据打包(DatagramPacket )  

3.调用DatagramSocket对象的方法发送数据(在组播中这里指定的是组播的地址)

4.释放资源

客户端代码如下:

package com.net;

import java.io.IOException;
import java.net.*;

/**
 * Created by lichangyun on 2020/7/21.
 */
public class UdpZbClient {
    public static void main(String[] args) throws IOException {

        DatagramSocket ds = new DatagramSocket();

        String msg="hello 组播";
        byte[] bytes = msg.getBytes();
        int length = bytes.length;
        InetAddress address = InetAddress.getByName("224.0.1.0");
        int port=10000;

        DatagramPacket dp = new DatagramPacket(bytes, length, address, port);

        ds.send(dp);

        ds.close();
    }
}

涉及到组播的服务端步骤如下:

1.创建客户端MulticastSocket对象

2.创建DatagramPacket对象,用于接收数据

3.调用MulticastSocket对象的接受方法,与DatagramPacket建立联系

4.解析数据包

5.释放资源

服务端代码如下:

package com.net;

import java.io.IOException;
import java.net.*;

/**
 * Created by lichangyun on 2020/7/21.
 */
public class UdpZbServer {
    public static void main(String[] args) throws IOException {

//        组播对象
        MulticastSocket ms = new MulticastSocket(10000);

        byte[] bytes = new byte[1024];
        int length = bytes.length;
        InetAddress address = InetAddress.getByName("224.0.1.0");

        DatagramPacket dp = new DatagramPacket(bytes, length);

        ms.joinGroup(address);

        ms.receive(dp);

        byte[] data = dp.getData();
        int length1 = dp.getLength();

        System.out.println("组播接受到的数据:  "+new String(data,0,length1));

        ms.close();
    }
}
原文地址:https://www.cnblogs.com/lichangyun/p/13351964.html