从零开始学netty——开启客户端

从零开始学netty——第一个netty程序
从零开始学netty——认识decoder数组

经过上面两篇文章,你们基本了解了一个netty的样子,为了专一介绍,特地省去了客户端的编写,使用telnet来当作客户端,而且传输的都是文字信息。文字信息局限比较大,因此开始了解客户端的编写。服务器

初见客户端

public void bind(String ip, int port) {
		EventLoopGroup worker = new NioEventLoopGroup();
		try {
			Bootstrap b = new Bootstrap();
			b.group(worker).channel(NioSocketChannel.class).handler(new ChannelInitializer<Channel>() {

				@Override
				protected void initChannel(Channel ch) throws Exception {
					ch.pipeline().addLast(new StringEncoder());
				}
			});
			ChannelFuture connect = b.connect(ip, port);
			connect.sync();
			connect.channel().writeAndFlush("hello");
			connect.channel().close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			worker.shutdownGracefully();
		}

	}

上面的代码就是客户端代码,乍一看还都挺熟悉的,和服务端的代码很类似。这里用到了StringEncoder,若是看了上篇的decoder,就很容易猜到了此次的encoder,decoder是在处理byte数组到对象的过程,encoder就是处理对象到byte数组的过程。StringEncoder也是netty提供好的类,专门用来处理字符串。框架

connect.sync();

上面的这个代码须要注意,connect也是一个异步的操做,下面想发消息,起码也得等到链接建立成功的,不少例子通常不写这句话,是由于他的逻辑,已经能知足connect成功了,通常逻辑仍是要保证前后的。异步

客户端和服务器端的差别

框架使用代码自己没有什么能够讲的,咱们就作一个对比,方便代码的记忆。ide

相同点

  1. 都是EventLoopGroup和NioEventLoopGroup。
  2. 都有group,channel,ChannelInitializer方法

不一样点

- 客户端 服务器端
EventLoopGroup个数 1 2
工厂类 NioSocketChannel NioServerSocketChannel
启动类 Bootstrap ServerBootstrap
绑定方法 connect bind

记忆方法

毕竟是框架代码,经常使用的话,必须是能够直接写出来的,而不是复制粘贴。 个人方法是只去记忆服务端代码,你只要能写出来,那么客户端根据不一样点编写。明显你们发现,启动类和工厂类的区别就是有server和没有server的区别。并且客户端确定是要作connect操做的,服务器端确定是要作bind操做的。加上这样的常识。基本能够很快就写出一个客户端代码。oop

相关文章
相关标签/搜索