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);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容