package com.netboy.netty.handler;
import java.util.Date;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
/**
* 服务器端handler
* TODO
* Administrator 2013-3-24下午03:34:28
*/
public class ServerHandler extends SimpleChannelHandler {
private static ChannelGroup channelGroup;
/**
* 构造函数,在spring加载的时候初始化一次。
*/
public ServerHandler() {
super();
/*获得客户端在服务器端注册的所有信息,用于向所有客户端分发消息*/
channelGroup = new DefaultChannelGroup("client-channel-group");
}
/**
* 用于扑捉客户端退出的消息。
* 并将其从服务器端的注册表中删掉。
*/
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
e.getCause().printStackTrace();
Channel channel = e.getChannel();
channel.close();
if (channelGroup.contains(channel)) {
System.out.println("一个客户端退出:"+channel.getId());
channelGroup.remove(channel);
}
}
/**
* 关键方法
* 用于接收从客户端发来的消息,进行相应的逻辑处理
* 这里,我们将任何一个客户端发来的消息,都将其转发给所有的客户端。
*/
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
throws Exception {
String content = (String) e.getMessage();
System.out.println("服务器收到" + e.getChannel().getId()
+ " 的消息 时间:" + new Date().toString() + " 消息内容:\n"+ content);
content=e.getChannel().getId()+":"+content;
if (content.equalsIgnoreCase("quit")) {
e.getChannel().close();
channelGroup.remove(e.getChannel());
return;
} else {
System.out.println("开始转发到其他客户端!:size="+channelGroup.size());
for(Channel ch:channelGroup){
System.out.println("开始转发到其他客户端!:"+ch.getId());
ch.write(content);
}
}
}
/**
* 对新连接的用户进行注册
*/
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {
System.out.println("新的客户端连入:"+e.getChannel().getId());
channelGroup.add(e.getChannel());
}
public ChannelGroup getChannelGroup() {
return channelGroup;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
netty框架,服务端、客户端代码示例
共32个文件
class:11个
java:7个
xml:7个
1星 需积分: 25 61 下载量 139 浏览量
2017-11-04
10:48:34
上传
评论
收藏 23KB RAR 举报
温馨提示
简单的netty框架示例,代码中有完整的注释,代码包含服务端跟客户端代码,RunServer服务端测试类,RunClient客户端测试类
资源推荐
资源详情
资源评论
收起资源包目录
nettyTest.rar (32个子文件)
nettyTest
pom.xml 1KB
conf
spring-client.xml 1KB
spring-server.xml 1KB
target
test-classes
com
netboy
netty
AppTest.class 619B
classes
META-INF
maven
com.netboy.netty
ChatNetty
pom.xml 1KB
pom.properties 249B
spring-client.xml 1KB
com
netboy
netty
client
ClientThread.class 2KB
RunClient.class 1KB
NettyClient.class 4KB
NettyClient$1.class 1KB
server
RunServer.class 1KB
RunServer$1.class 942B
NettyServer.class 2KB
NettyServer$1.class 1KB
handler
ClientHandler.class 1KB
ServerHandler.class 4KB
spring-server.xml 1KB
.settings
com.genuitec.eclipse.migration.prefs 117B
org.eclipse.wst.common.project.facet.core.xml 177B
org.eclipse.core.resources.prefs 88B
org.maven.ide.eclipse.prefs 249B
org.eclipse.jdt.core.prefs 430B
src
test
main
java
com
netboy
netty
client
NettyClient.java 2KB
ClientThread.java 780B
RunClient.java 715B
server
RunServer.java 947B
NettyServer.java 2KB
handler
ClientHandler.java 494B
ServerHandler.java 3KB
.project 945B
.classpath 1KB
共 32 条
- 1
资源评论
- weixin_428013182018-08-11很老的代码了
chenkaiyy
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功