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

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐