tiger1334 2016-01-27 15:08 采纳率: 0%
浏览 1522

我这个netty5 TimeServer为什么达不到效果?

/*

  • Copyright 2013-2018 Lilinfeng.
  • Licensed under the Apache License, Version 2.0 (the "License");
  • you may not use this file except in compliance with the License.
  • You may obtain a copy of the License at
  • http://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS,
  • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • See the License for the specific language governing permissions and
  • limitations under the License. */ package com.phei.netty.basic;

import java.nio.charset.Charset;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

/**

  • @author lilinfeng
  • @date 2014年2月14日
  • @version 1.0
    */
    public class TimeServer {

    public void bind(int port) throws Exception {
    // 配置服务端的NIO线程组
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
    ServerBootstrap b = new ServerBootstrap();
    b.group(bossGroup, workerGroup)
    .channel(NioServerSocketChannel.class)
    .option(ChannelOption.SO_BACKLOG, 1024)
    .childHandler(new ChildChannelHandler());
    // 绑定端口,同步等待成功
    ChannelFuture f = b.bind(port).sync();

    // 等待服务端监听端口关闭
    f.channel().closeFuture().sync();
    

    } finally {
    // 优雅退出,释放线程池资源
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();
    }
    }

    private class ChildChannelHandler extends ChannelInitializer {
    @Override
    protected void initChannel(SocketChannel arg0) throws Exception {
    arg0.pipeline().addLast(new LineBasedFrameDecoder(1024));
    arg0.pipeline().addLast(new StringDecoder(Charset.forName("UTF-8")));
    arg0.pipeline().addLast(new TimeServerHandler());

    }

    }

    /**

    • @param args
    • @throws Exception */ public static void main(String[] args) throws Exception { int port = 8080; if (args != null && args.length > 0) { try { port = Integer.valueOf(args[0]); } catch (NumberFormatException e) { // 采用默认值 } } new TimeServer().bind(port); } }

/*

  • Copyright 2012 The Netty Project *
  • The Netty Project licenses this file to you under the Apache License,
  • version 2.0 (the "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at: *
  • http://www.apache.org/licenses/LICENSE-2.0 *
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  • WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  • License for the specific language governing permissions and limitations
  • under the License. */ package com.phei.netty.basic;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;

/**

  • @author lilinfeng
  • @date 2014年2月14日
  • @version 1.0
    */
    public class TimeServerHandler extends ChannelHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg)
    throws Exception {
    String body = (String)msg;
    System.out.println("The time server receive order : " + body);
    String currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body) ? new java.util.Date(
    System.currentTimeMillis()).toString() : "BAD ORDER";
    ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes());
    ctx.writeAndFlush(resp);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {

    cause.printStackTrace();
    ctx.close();
    

    }
    }

/*

  • Copyright 2013-2018 Lilinfeng.
  • Licensed under the Apache License, Version 2.0 (the "License");
  • you may not use this file except in compliance with the License.
  • You may obtain a copy of the License at
  • http://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS,
  • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • See the License for the specific language governing permissions and
  • limitations under the License. */ package com.phei.netty.basic;

import java.nio.charset.Charset;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

/**

  • @author lilinfeng
  • @date 2014年2月14日
  • @version 1.0
    */
    public class TimeClient {

    public void connect(int port, String host) throws Exception {
    // 配置客户端NIO线程组
    EventLoopGroup group = new NioEventLoopGroup();
    try {
    Bootstrap b = new Bootstrap();
    b.group(group).channel(NioSocketChannel.class)
    .option(ChannelOption.TCP_NODELAY, true)
    .handler(new ChannelInitializer() {
    @Override
    public void initChannel(SocketChannel ch)
    throws Exception {
    ch.pipeline().addLast(new LineBasedFrameDecoder(1024));
    ch.pipeline().addLast(new StringDecoder(Charset.forName("UTF-8")));
    ch.pipeline().addLast(new TimeClientHandler());
    }
    });

    // 发起异步连接操作
    ChannelFuture f = b.connect(host, port).sync();
    
    // 当代客户端链路关闭
    f.channel().closeFuture().sync();
    

    } finally {
    // 优雅退出,释放NIO线程组
    group.shutdownGracefully();
    }
    }

    /**

    • @param args
    • @throws Exception */ public static void main(String[] args) throws Exception { int port = 8080; if (args != null && args.length > 0) { try { port = Integer.valueOf(args[0]); } catch (NumberFormatException e) { // 采用默认值 } } new TimeClient().connect(port, "127.0.0.1"); } }

/*

  • Copyright 2012 The Netty Project *
  • The Netty Project licenses this file to you under the Apache License,
  • version 2.0 (the "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at: *
  • http://www.apache.org/licenses/LICENSE-2.0 *
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  • WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  • License for the specific language governing permissions and limitations
  • under the License. */ package com.phei.netty.basic;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;

import java.util.logging.Logger;

/**

  • @author lilinfeng
  • @date 2014年2月14日
  • @version 1.0
    */
    public class TimeClientHandler extends ChannelHandlerAdapter {
    private byte[] req;

    private static final Logger logger = Logger
    .getLogger(TimeClientHandler.class.getName());

    /**

    • Creates a client-side handler. */ public TimeClientHandler() { req = ("QUERY TIME ORDER"+System.getProperty("line.seperator")).getBytes(); }

    @Override
    public void channelActive(ChannelHandlerContext ctx) {
    ByteBuf message = null;
    for(int i = 0;i<100;i++){
    message = Unpooled.buffer(req.length);
    message.writeBytes(req);
    ctx.writeAndFlush(message);
    }
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg)
    throws Exception {
    String body = (String) msg;
    System.out.println("Now is : " + body);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
    // 释放资源
    logger.warning("Unexpected exception from downstream : "
    + cause.getMessage());
    cause.printStackTrace();
    ctx.close();
    }
    }

  • 写回答

1条回答

  • threenewbee 2016-01-27 23:09
    关注

    运行你的程序,看报什么错误。这是第一步,如果没有报错,用标准的客户端和标准的服务器端分别测试你的客户端和服务器端看能不能工作。如果在开发环境可以工作,运行环境不行,那么检查环境、配置等问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记