Java-UDP网络编程学习笔记

概念:

用户数据报传输协议

特点:

传输数据量小(64K),不一定传输成功,没有明确的客户端与服务端的概念,数据不会通过输入输出流传输,而是会通过打包成数据报,,再传输入通道

构造方法:

1.DatagramSocket (端口号)             //DatagramSocket 构造方法

2.1 DatagramPacket( 字节数组 ,数组长度) //构造一个空的数据报

2.2 DatagramPacket( 字节数组,数组长度,IP,端口号 ) //将要传输的数据包装成一个数据包

DatagramSocket方法:

socket.receive(packt); //将数据包发送到通道

socket.send(packet);  //接收通道的数据包 注意:如果未接收到 程序会停滞

DatagramPacket方法:

packet.getLength();  //获取数据包中字节数组的真实长度

packet.getData(); //从数据包中获取数据,是一个字节数组

UDPReceiver接收端代码:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.sql.SQLOutput;

/**
 * ======刘春春大帅逼======
 * ******java学习之旅******
 *
 * ————————UDP接收端——————
 *
 */
public class UDPReceiver {
    public static void main(String[] args) throws Exception{

        //1.创建一个DatagramSocket对象 , 准备在9999接收数据
        DatagramSocket socket = new DatagramSocket(9999);

        //2.构建一个DatagramPacket 对象,准备接收数据
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf,buf.length);

        //3.调用接收方法 , 将通过网络传输的 DatagramPacket对象
        // 填充到packet对象
        socket.receive(packet);

        //4.可以把packet 进行拆包,取出数据,并显示
        int length= packet.getLength();//获取数据包中字节数组的真实长度
        byte[] data = packet.getData();//从数据包中获取数据,是一个字节数组

        String s =  new String(data,0,length);
        System.out.println(s);

        socket.close();

    }
}

UDPSender发送端:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;

/**
 * ======刘春春大帅逼======
 * ******java学习之旅******
 *
 * ------发送端------ 也可以接收数据
 */
public class UDPSender {
    public static void main(String[] args) throws  Exception{

        //创建 DatagramSocket 对象,准备发送和 接收数据(9998)
        DatagramSocket socket = new DatagramSocket(9998);

        // 将需要发送的数据,封装到 DatagramPacket对象
        byte[] data = "hello 明天吃火锅!".getBytes(StandardCharsets.UTF_8);

        //说明: 封装的DatagramPacket对象 data内容字节数组,data.length,主机(ip),端口
        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.19.1"), 9999);

        socket.send(packet);

        socket.close();

    }
}

谢谢观看,如有错误,劳烦指出!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值