Qt C++与Android Netty之间传输字节码问题

1 技术栈结构

服务端是qt c++写的,客户端是android移动设备,程序语言为java。

2 技术流

android端连接服务器,之间的通讯协议用protobuf,传输的是字节码流。qt :QByteArray; Java : byte[]数组

3 发送数据

Qt:

QTcpSocket conn;

QByteArray ba;

conn.write(ba.data(), ba.length());

Android:

Bootstrap bootstrap =new Bootstrap();

bootstrap.group(group).channel(NioSocketChannel.class)

.option(ChannelOption.TCP_NODELAY,true)

.handler(new ChannelInitializer() {

@Override

                protected void initChannel(SocketChannel ch)throws Exception {

ch.pipeline()

.addLast(new ByteArrayEncoder())//这个很关键

.addLast(new ByteArrayDecoder())//这个很关键

.addLast(new NettyHandler(new NettyHandler.HandlerCallback() {

@Override

                                public void onError() {

if(mListener !=null){

mListener.onError(ERROR_RECV);

}

}

@Override

                                public void onDataRecv(byte[] data) {

if(mListener !=null){

mListener.onRecvData(data);

}

}

}));

}

});

mChannelFuture =bootstrap.connect(host, port)

.addListener(future -> {

boolean isSuccess = future.isSuccess();

if(isSuccess ==true){

if(mListener !=null){

mListener.onConnectSuccess();

}

}else{

if(mListener !=null){

mListener.onConnectFail();

}

}

})

.sync();

}catch (Exception e){

e.printStackTrace();

group.shutdownGracefully();

if(mListener !=null){

mListener.onError(ERROR_CONNECT);

}

}

你可能感兴趣的:(Qt C++与Android Netty之间传输字节码问题)