java - 使用 Netty 的聊天服务器

标签 java networking netty

我用netty写了一个简单的聊天服务器,我和一个 friend 一直用telnet测试它。当我们两个都连接时,它表示组的大小为 1。每当写入用户列表时,它只会写入发送消息的人。我怎样才能解决这个问题?

import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;

public class ServerChannelHandler extends SimpleChannelHandler {

  private ChannelGroup users = new DefaultChannelGroup();

  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    users.write(e.getMessage());
  }

  @Override
  public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
    users.add(e.getChannel());
    System.out.println("Opened. ");
    System.out.println(users.size());
  }

  @Override
  public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
    users.remove(e.getChannel());
  }


}

最佳答案

您必须为所有创建的 ChannelPipeline 实例共享相同的处理程序实例。或者将 ChannelGroup 声明为 static Final

关于java - 使用 Netty 的聊天服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696822/

相关文章:

java - 使用 JAX-RS 进行热重载

java - 自引用数据库设计

java - Android TCP - 应用程序关闭时套接字不会断开连接

networking - netstat -na : udp and state established?

netty - netty 中非阻塞 channel 中的 SO_TIMEOUT

java - 无法为 Java 9 中自动生成的模块名称派生模块描述符?

java - 如何使用 ApplicationContext 从 Spring 配置中获取集合

java - Java中Path的硬编码部分

windows - 即使我们更改网络,如何使 vm 内的服务器具有相同的 ip 地址

networking - UDP 客户端 - 打开端口?