Java UDP通信 讲解与简单实现

本文介绍了Java中UDP协议的使用,讲解了DatagramSocket类和DatagramPacket类的构造方法,分别针对接收端和发送端。通过一个本地UDP通信的例子,展示了UDPServer和UDPClient的实现,实现了数据的发送与接收。
摘要由CSDN通过智能技术生成

UDP协议

UDP提供了一种无需建立连接就能发送数据的方式,即“喊话”,他不管接收者是否收到,只管发送,优点是占用资源少 不用像tcp那样建立可靠连接

DatagramSocket类

使用DatagramSocket类我们可以简单的封装一个socket,但是不同的是,这个socket不是像TCP的socket那样建立可靠连接,这个socket是一个抽象的“管道”,负责发送数据,而不维护流,也不维护连接状态

抽象的讲,创建DatagramSocket对象,相当于我们架起天线,准备接受,或者发送

接收端DatagramSocket的构造

在创建接收端的DatagramSocket对象时,需要指定两个参数,即侦听的端口和ip,默认是localhost

InetAddress addr = InetAddress.getByName("localhost");
int port = 54321;
DatagramSocket recv_socket = new DatagramSocket(port, addr);

发送端DatagramSocket的构造

在创建发送端的DatagramSocket对象时,我们不需要指定参数,因为目标主机的信息包含在数据里面,要在数据包里面指定,这个稍后会提到

DatagramSocket send_socket = new DatagramSocket();

DatagramPacket类

DatagramPacket类是抽象的数据包类,DatagramSocket正是用来发送或者接受DatagramPacket对象的管道。

如果把DatagramSocket比作天线,那么DatagramPacket就是发送的电磁波

和DatagramSocket类似,发送端和接收端的配置方式都不一样,接下来看一下如何构造DatagramPacket对象

接收端DatagramPacket对象的构造

因为接收端DatagramSocket已经指定了侦听的端口和ip,所以这个包只负责存数据,即我们只需要指定一个字节数组,并且传递给DatagramPacket,即可指定数据存放的DatagramPacket包

byte[] rbuf = new byte[1024];
DatagramPacket data = new DatagramPacket(rbuf, 1024);

发送端DatagramPacket对象的构造

发送端DatagramPacket就比较特殊,因为我们的发送socket只负责发送,不管发到哪里,而目标地址是写在UDP包里面的,所以我们不仅要指定数据所在的字节数组,还要传入目标主机的ip和端口

// 发送给服务端
String send_msg = "hello\r\n";
byte[] sbuf = send_msg.getBytes();
int send_port = 54321;
InetAddress addr = InetAddress.getByName(ip);
DatagramPacket resp 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值