37.1 net-- udp传输

一、打开接收端

package day35_net_网络编程.udp传输;

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

/*
 * 使用UDP协议接收数据
        创建接收端Socket对象
        接收数据
        解析数据
        输出数据
        释放资源

 */
public class UdpReceiveDate {
    public static void main(String[] args) throws IOException {
        int port = 8888;
        InetAddress address = InetAddress.getLocalHost();

        //1.创建接收端Socket对象
        DatagramSocket ds = new DatagramSocket(8888,address);

        //2.接收数据 void receive(DatagramPacket p) 从此套接字接收数据报包。
        //DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。
        byte[] byts = new byte[1024];
        int length = byts.length;

        DatagramPacket dp = new DatagramPacket(byts,length);

        System.out.println(1);
        ds.receive(dp);//阻塞
        System.out.println(2);

        //3.输出数据
        // byte[] getData() 返回数据缓冲区。

        byte[] byt = dp.getData();
        int len = dp.getLength();
        String data = new String(byt,0,len);

        System.out.println("send -->"+ address.getHostName() + "---" + data);

        //4.释放资源
        ds.close();

    }
}

二、发送端,发送数据

package day35_net_网络编程.udp传输;

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

/*
 * 使用UDP协议发送数据
        创建发送端Socket对象
        创建数据并打包
        发送数据
        释放资源
 *
 * DatagramSocket:此类表示用来发送和接收数据,基于UDP协议的
 *
 * DatagramSocket() :创建Socket对象并随机分配端口号
 * DatagramSocket(int port) :创建Socket对象并指定端口号
 *
 * * UDP协议收发数据的注意事项:
 *         端口号错误,数据可以正常发出,不会出现异常,但是收不到数据(udp无连接,只管发不管能不能收到)
 *         Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
 *             端口号已经绑定了
 */
public class UdpSendDate {
    public static void main(String[] args) throws IOException {

        //1.创建发送端Socket对象,构造方法DatagramSocket(int port, InetAddress laddr)
        DatagramSocket ds = new DatagramSocket();

        //2.发送数据void send(DatagramPacket p)
        //发包构造方法:DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
        String s = "hello udp 0000";
        byte[] byts = s.getBytes();
//        int length = 1024;
        int length = byts.length;
        int port = 8888;
        //使用本地地址发送数据
        InetAddress address = InetAddress.getLocalHost();
        DatagramPacket dp = new DatagramPacket(byts,length,address,port);

        //3.发送数据
        ds.send(dp);

        //4.释放资源
        ds.close();
    }
}

三、输出

原文地址:https://www.cnblogs.com/longesang/p/11375593.html