请大神帮看看,android中使用netty怎么会阻塞。

种豆南山下920 发布于 2016/05/27 11:49
阅读 179
收藏 0
我在android中使用netty,怎么会阻塞呢?我用的是sync()啊,请大神帮初学者解答下。
// 线程池
		EventLoopGroup group = new NioEventLoopGroup();
		try
		{
			// 服务类
			Bootstrap b = new Bootstrap();
			b.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true)
					.handler(new ChannelInitializer<SocketChannel>()
					{
						@Override
						protected void initChannel(SocketChannel ch) throws Exception
						{
							ch.pipeline().addLast(new AdapterUpload());
						}

					});

			// 发起异步连接操作
			ChannelFuture f = b.connect(ip, port).sync();

			// 等待客户端链路关闭
			f.channel().closeFuture().sync();
		} catch (Exception e)
		{
			PcaApplication.getInstance().printError(e);
		} finally
		{
			// 退出、释放NIO线程组
			group.shutdownGracefully();
		}

public class AdapterUpload extends ChannelHandlerAdapter
{
	private final ByteBuf firstMessage;

	public AdapterUpload()
	{
		byte[] req = "jiaoyishuju".getBytes();
		firstMessage = Unpooled.buffer(req.length);
		firstMessage.writeBytes(req);
	}

	/**
	 * 已经连接到服务器
	 */
	@Override
	public void channelActive(ChannelHandlerContext ctx) throws Exception
	{
		PcaApplication.getInstance().syso("已经连接到服务器");
		ctx.writeAndFlush(firstMessage);
		// ctx.close();
	}

	/**
	 * 与服务器断开连接
	 */
	@Override
	public void channelInactive(ChannelHandlerContext ctx) throws Exception
	{
		PcaApplication.getInstance().syso("与服务器断开连接");
		super.channelInactive(ctx);
	}

	/**
	 * 服务器返回数据
	 */
	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
	{
		ByteBuf buf = (ByteBuf) msg;
		byte[] req = new byte[buf.readableBytes()];
		buf.readBytes(req);
		String body = new String(req, "UTF-8");
		PcaApplication.getInstance().syso(body);
	}

	/**
	 * 异常捕获
	 */
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
	{
		ctx.close();
	}

}





加载中
返回顶部
顶部