Netty实战二-实现UDP的单播和广播(1)

本文介绍了使用Java和Netty库实现的UDP单向通信系统,一个服务器随机发送笑话响应客户端的请求,同时展示了如何通过UDP进行日志广播功能。
摘要由CSDN通过智能技术生成

public class AnswerHandler extends

SimpleChannelInboundHandler {

/应答的具体内容从常量字符串数组中取得,由nextQuote方法随机获取/

private static final String[] DICTIONARY = {

“一个男生暗恋一个女生很久了。一天自习课上,男生偷偷的传了小纸条给女生,上面写着“其实我注意你很久了”。不一会儿,女生传了另一张纸条,男生心急火燎的打开一看“拜托你不要告诉老师,我保证以后再也不嗑瓜子了”。。。。。。男生一脸懵逼”,

“昨天因为一件事骂儿子,说你妈妈是猪,你也是头猪。儿子却反过来说我:爸爸你怎么这么衰,娶了一头猪,还生了一只猪!你说你这熊孩子,这是不是找打。”,

“火云邪神苦练多年,终于将蛤蟆功练至顶级并成功产下8个小蝌蚪。”,

“老婆永远是对的,这话永远也是对的。但老婆没想到的是,她不一定永远是老婆”,

“人生天地间没有谁是容易的,就算是思聪也得每天犯愁怎么花钱。”,

“今天去理发,洗剪吹68,烫发和染发668。我就做了个洗剪吹,结账的时候发现居然收我66”};

private static Random r = new Random();

private String nextQuote(){

return DICTIONARY[r.nextInt(DICTIONARY.length-1)];

}

@Override

protected void channelRead0(ChannelHandlerContext ctx,

DatagramPacket packet)

throws Exception {

//获得请求

String req = packet.content().toString(CharsetUtil.UTF_8);

System.out.println(“接收到请求:”+req);

if(UdpQuestionSide.QUESTION.equals(req)){

String answer = UdpAnswerSide.ANSWER+nextQuote();

System.out.println(“接收到请求:”+req);

/**

  • 重新 new 一个DatagramPacket对象,我们通过packet.sender()来获取发送者的消息。重新发送出去!

*/

ctx.writeAndFlush(

new DatagramPacket(

Unpooled.copiedBuffer(

answer,

CharsetUtil.UTF_8),

packet.sender()));

}

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)

throws Exception {

ctx.close();

cause.printStackTrace();

}

}

2、UdpAnswerSide

定义应答服务器

public final static String ANSWER = “笑话来了:”;

public void run(int port) throws Exception{

EventLoopGroup group = new NioEventLoopGroup();

try {

/*和tcp的不同,udp没有接受连接的说法,所以即使是接收端,

也使用Bootstrap*/

Bootstrap b = new Bootstrap();

/由于我们用的是UDP协议,所以要用NioDatagramChannel来创建/

b.group(group)

.channel(NioDatagramChannel.class)

.handler(new AnswerHandler());

//没有接受客户端连接的过程,监听本地端口即可

ChannelFuture f = b.bind(port).sync();

System.out.println(“应答服务已启动…”);

f.channel().closeFuture().sync();

} finally {

group.shutdownGracefully();

}

}

public static void main(String [] args) throws Exception{

int port = 8080;

new UdpAnswerSide().run(port);

}

3、QuestoinHandler

定义应答服务器处理handler

/**

  • 作者:DarkKIng

  • 类说明:订阅handler,读取服务器的应答

*/

public class QuestoinHandler extends

SimpleChannelInboundHandler {

@Override

protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg)

throws Exception {

//获得应答,DatagramPacket提供了content()方法取得报文的实际内容

String response = msg.content().toString(CharsetUtil.UTF_8);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值