示例#1
0
文件: Server.java 项目: qza/gft-crw
 public void start() throws InterruptedException {
   initializer.initServerState();
   EventLoopGroup bossGroup = new NioEventLoopGroup();
   EventLoopGroup workerGroup = new NioEventLoopGroup();
   try {
     ServerBootstrap b = new ServerBootstrap();
     b.group(bossGroup, workerGroup)
         .channel(NioServerSocketChannel.class)
         .childHandler(new ServerInitializer(context));
     b.bind(9090).sync().channel().closeFuture().sync();
     log.info("Server started " + new Date());
   } finally {
     log.info("Server is shutting down " + new Date());
     bossGroup.shutdown();
     workerGroup.shutdown();
   }
 }
示例#2
0
  public void run() throws Exception {
    EventLoopGroup group = new NioEventLoopGroup();
    try {
      Bootstrap b = new Bootstrap();
      b.group(group).channel(NioSocketChannel.class).handler(new TelnetClientInitializer());

      // Start the connection attempt.
      Channel ch = b.connect(host, port).sync().channel();

      // Read commands from the stdin.
      ChannelFuture lastWriteFuture = null;
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      for (; ; ) {
        String line = in.readLine();
        if (line == null) {
          break;
        }

        // Sends the received line to the server.
        lastWriteFuture = ch.write(line + "\r\n");

        // If user typed the 'bye' command, wait until the server closes
        // the connection.
        if ("bye".equals(line.toLowerCase())) {
          ch.closeFuture().sync();
          break;
        }
      }

      // Wait until all messages are flushed before closing the channel.
      if (lastWriteFuture != null) {
        lastWriteFuture.sync();
      }
    } finally {
      group.shutdown();
    }
  }
示例#3
0
  public void run() throws Exception {
    // Address to bind on / connect to.
    final LocalAddress addr = new LocalAddress(port);

    EventLoopGroup serverGroup = new LocalEventLoopGroup();
    EventLoopGroup clientGroup = new NioEventLoopGroup(); // NIO event loops are also OK
    try {
      // Note that we can use any event loop to ensure certain local channels
      // are handled by the same event loop thread which drives a certain socket channel
      // to reduce the communication latency between socket channels and local channels.
      ServerBootstrap sb = new ServerBootstrap();
      sb.group(serverGroup)
          .channel(LocalServerChannel.class)
          .handler(
              new ChannelInitializer<LocalServerChannel>() {
                @Override
                public void initChannel(LocalServerChannel ch) throws Exception {
                  ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
                }
              })
          .childHandler(
              new ChannelInitializer<LocalChannel>() {
                @Override
                public void initChannel(LocalChannel ch) throws Exception {
                  ch.pipeline()
                      .addLast(new LoggingHandler(LogLevel.INFO), new LocalEchoServerHandler());
                }
              });

      Bootstrap cb = new Bootstrap();
      cb.group(clientGroup)
          .channel(LocalChannel.class)
          .handler(
              new ChannelInitializer<LocalChannel>() {
                @Override
                public void initChannel(LocalChannel ch) throws Exception {
                  ch.pipeline()
                      .addLast(new LoggingHandler(LogLevel.INFO), new LocalEchoClientHandler());
                }
              });

      // Start the server.
      sb.bind(addr).sync();

      // Start the client.
      Channel ch = cb.connect(addr).sync().channel();

      // Read commands from the stdin.
      System.out.println("Enter text (quit to end)");
      ChannelFuture lastWriteFuture = null;
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      for (; ; ) {
        String line = in.readLine();
        if (line == null || "quit".equalsIgnoreCase(line)) {
          break;
        }

        // Sends the received line to the server.
        lastWriteFuture = ch.write(line);
      }

      // Wait until all messages are flushed before closing the channel.
      if (lastWriteFuture != null) {
        lastWriteFuture.awaitUninterruptibly();
      }
    } finally {
      serverGroup.shutdown();
      clientGroup.shutdown();
    }
  }