基于UDP的网络编程,DatagramSocket和DatagramPacket

1.概念

User Datagram Protocol的简称,用户数据包协议,提供面向事务的简单不可靠信息传送服务

特点:
a.不安全
b.无连接
c.效率高
d.UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内

2. DatagramSocket和DatagramPacket

DatagramSocket: 数据报套接字,表示用来发送和接收数据报包的套接字。
DatagramPacket:此类表示数据报包。每个包最大64kb
其中DatagramSocket中的receive()方法和TCP中的ServerSocket中的accept()方法都属于阻塞方法。

代码案例,双方收发文字消息:

//接收者:
public class Receiver {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds=new DatagramSocket(8888);//接收方必须指定具体端口号
        System.out.println("准备接受...");
        byte[] buf=new byte[1024*8];
        DatagramPacket dp=new DatagramPacket(buf,buf.length);//传输的数据报包,最大64kb,
        ds.receive(dp);//这里接收字节数组中数据
        String string=new String(dp.getData(),0,dp.getLength());//将接受的数据包转换成字符串,从0开始,长度是数据包长度
        System.out.println(string);//打印字符串数据
        System.out.println("发件地址是"+dp.getAddress());//这里还可以通过数据报包来得到发送方地址
        ds.close();//关闭
        System.out.println("接收完毕");
    }
}



//发送方
public class Sender {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds=new DatagramSocket();//发送方可以不指定端口号
        Scanner sc=new Scanner(System.in);//控制台输入发送的消息
        String date = sc.next();
        DatagramPacket dp=new DatagramPacket(date.getBytes(),date.getBytes().length, InetAddress.getLoopbackAddress(),8888);//数据包中只能传输字节,要将输入的字符串传换成字节发送,在加上接收方的端口号
        ds.send(dp);//发送数据报包
        ds.close();
        System.out.println("发送成功");
    }
}


注意:启动的时候,先启动接收方,在启动发送方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值