1、pom文件
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.19.Final</version>
</dependency>
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack</artifactId>
<version>0.6.7</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.8</version>
</dependency>
<dependency>
<groupId>org.jibx</groupId>
<artifactId>jibx-bind</artifactId>
<version>1.3.1</version>
</dependency>
<!--<dependency>-->
<!--<groupId>org.jboss.marshalling</groupId>-->
<!--<artifactId>jboss-marshalling</artifactId>-->
<!--<version>1.4.11.Final</version>-->
<!--</dependency>-->
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling-serial</artifactId>
<version>1.4.11.Final</version>
</dependency>
</dependencies>
重点关注:jboss-marshalling-serial包,一开始我导的不是这个,是上面注释的jboss-marshalling,
结果导致Server无法向Client发送消息。
原因是下面的MarshallingCodeCFactory类,获取marshallerFactory是返回null,没获取到!
MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
编解码工具类
package com.xkl.learn.privateprotocol.tool;
import java.io.IOException;
import org.jboss.marshalling.MarshallerFactory;
import org.jboss.marshalling.Marshalling;
import org.jboss.marshalling.MarshallingConfiguration;
import io.netty.handler.codec.marshalling.DefaultMarshallerProvider;
import io.netty.handler.codec.marshalling.DefaultUnmarshallerProvider;
import io.netty.handler.codec.marshalling.MarshallerProvider;
import io.netty.handler.codec.marshalling.UnmarshallerProvider;
/**
* Created by xiekunliang on 2018/2/6.
*/
public class MarshallingCodeCFactory
{
public static NettyMarshallingDecoder buildMarshallingDecoder() throws IOException
{
MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
MarshallingConfiguration configuration = new MarshallingConfiguration();
configuration.setVersion(5);
UnmarshallerProvider provider = new DefaultUnmarshallerProvider(marshallerFactory, configuration);
NettyMarshallingDecoder decoder = new NettyMarshallingDecoder(provider, 1024 << 2);
return decoder;
}
public static NettyMarshallingEncoder buildMarshallingEncoder()
{
MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
MarshallingConfiguration configuration = new MarshallingConfiguration();
configuration.setVersion(5);
MarshallerProvider provider = new DefaultMarshallerProvider(marshallerFactory, configuration);
NettyMarshallingEncoder encoder = new NettyMarshallingEncoder(provider);
return encoder;
}
}
package com.xkl.learn.privateprotocol.tool;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.marshalling.MarshallerProvider;
import io.netty.handler.codec.marshalling.MarshallingEncoder;
/**
* Created by xiekunliang on 2018/2/5.
* 编码器
*/
public class NettyMarshallingEncoder extends MarshallingEncoder
{
/**
* Creates a new encoder.
*
* @param provider the {@link MarshallerProvider} to use
*/
public NettyMarshallingEncoder(MarshallerProvider provider)
{
super(provider);
}
@Override
public void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) {
try {
super.encode(ctx, msg, out);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.xkl.learn.privateprotocol.tool;
import io.netty.buffer.ByteBuf