单播意味着点对点发送信息,要注意点为:
(1)连接协议规定为NioDatagramChannel协议。
(2)需要将UDP请求报文以DatagramPacket打包发送给接收端。
(3)由于UDP是不保证传输完整以及安全,或者正确,重点在意效率,不需要关注接收端是否有收到报文,所以接收端能否能收到数据,是依据接收是否有回复应答报文进行判断,所以设置等待时间进行接收(阻塞),等待时间过后关闭信道,不论是否有应答。
简单实现伪代码:
发送端:
b.group(group)
/*由于我们用的是UDP协议,所以要用NioDatagramChannel来创建*/
.channel(NioDatagramChannel.class)
.handler(new QuestoinHandler());
//不需要建立连接
Channel ch = b.bind(0).sync().channel();
//将UDP请求的报文以DatagramPacket打包发送给接受端
ch.writeAndFlush(
new DatagramPacket(
Unpooled.copiedBuffer(QUESTION,
CharsetUtil.UTF_8),
new InetSocketAddress("127.0.0.1",
port)))
.sync();
//不知道接收端能否收到报文,也不知道能否收到接收端的应答报文
// 所以等待15秒后,不再等待,关闭通信
if(!ch.closeFuture().await(15000)){
System.out.println("查询超时!");
}
应答端:

最低0.47元/天 解锁文章
1700

被折叠的 条评论
为什么被折叠?



