package com.czh.server;
import java.net.InetSocketAddress;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.socket.DatagramChannel;
import io.netty.channel.socket.DatagramPacket;
import io.netty.util.CharsetUtil;
import io.netty.util.internal.ThreadLocalRandom;
/**
* @author 作者 YYD
* @version 创建时间:2016年11月18日 下午8:43:10
* @function 未添加
*/
public class ChineseProverbServerHandler extends
SimpleChannelInboundHandler<DatagramPacket> {
//谚语列表
private static final String[] DICTIONARY = { "只要功夫深,铁棒磨成针。",
"旧时王谢堂前燕,飞入寻常百姓家。", "洛阳亲友如相问,一片冰心在玉壶。", "一寸光阴一寸金,寸金难买寸光阴。",
"老骥伏枥,志在千里,烈士暮年,壮心不已" };
private String nextQuote(){
//返回0-DICTIONARY.length中的一个整数。
int quoteId = ThreadLocalRandom.current().nextInt(DICTIONARY.length);
return DICTIONARY[quoteId];//将谚语列表中对应的谚语返回
}
/**
* 在这个方法中,形参packet客户端发过来的DatagramPacket对象
* DatagramPacket 类解释
* 1.官网是这么说的:
* The message container that is used for {@link DatagramChannel} to communicate with the remote peer.
* 翻译:DatagramPacket 是消息容器,这个消息容器被 DatagramChannel使用,作用是用来和远程设备交流
* 2.看它的源码我们发现DatagramPacket是final类不能被继承,只能被使用。我们还发现DatagramChannel最终实现了AddressedEnvelope接口,接下来我们看一下AddressedEnvelope接口。
* AddressedEnvelope接口官网解释如下:
* A message that wraps another message with a sender address and a recipient address.
* 翻译:这是一个消息,这个消息包含发送者和接受者消息
* 3.那我们知道了DatagramPacket它包含了发送者和接受者的消息,
* 通过content()来获取消息内容
* 通过sender();来获取发送者的消息
* 通过recipient();来获取接收者的消息。
*
* 4.public DatagramPacket(ByteBuf data, InetSocketAddress recipient) {}
* 这个DatagramPacket其中的一个构造方法,data 是发送内容;是发送都信息。
*/
@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet)
throws Exception {
String req = packet.content().toString(CharsetUtil.UTF_8);//上面说了,通过content()来获取消息内容
System.out.println(req);
if("谚语字典查询?".equals(req)){//如果消息是“谚语字典查询?”,就随机获取一条消息发送出去。
/**
* 重新 new 一个DatagramPacket对象,我们通过packet.sender()来获取发送者的消息。
* 重新发达出去!
*/
ctx.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer("谚语查询结果:"+nextQuote(),CharsetUtil.UTF_8), packet.sender()));
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
throws Exception {
ctx.close();
cause.printStackTrace();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
workspace.zip (19个子文件)
NettyStudyServer
bin
com
czh
server
ChineseProverbServerHandler.class 3KB
ChineseProverbServer.class 2KB
.settings
org.eclipse.jdt.core.prefs 598B
src
com
czh
server
ChineseProverbServer.java 1003B
ChineseProverbServerHandler.java 3KB
.project 392B
.classpath 534B
libs
junit.jar 239KB
netty-all-4.0.36.Final.jar 2.09MB
netty-all-4.0.36.Final-sources.jar 1.68MB
NettyStudyClient
bin
com
czh
client
ChineseProverbClient.class 3KB
ChineseProverClientHandler.class 2KB
.settings
org.eclipse.jdt.core.prefs 598B
src
com
czh
client
ChineseProverbClient.java 1KB
ChineseProverClientHandler.java 935B
.project 392B
.classpath 502B
libs
netty-all-4.0.36.Final.jar 2.09MB
netty-all-4.0.36.Final-sources.jar 1.68MB
共 19 条
- 1
资源评论
- 冷月宫主2017-11-25netty之UDP协议开发
程序编织梦想
- 粉丝: 86
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功