android连接netty
1. 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);
}
}
2. netty4 能不能运行在android上
jar
bootstrap = new
Bootstrap().setAllocator(PooledByteBufAllocator.config().DEFAULT).toString()).Final.0.0.d(".17;
}
}).17;ClientConnection"
return
channel.group(new
NioEventLoopGroup()).jar
netty-transport-4.DEFAULT);
bootstrap.jar
netty-codec-4.setAllocator(PooledByteBufAllocator;.config().jar
netty-handler-4;
解决传输文件的时候爆没有sun
buf类的问题
channel.DEFAULT.Final,
PooledByteBufAllocator.0;
Log.17netty-buffer-4;
channel;NioSocketChannel>.Final.17.Final.Final.0.channelFactory(new
ChannelFactory<.0.17.jar
netty-common-4;
bootstrap;(){
@Override
public
NioSocketChannel newChannel() {
NioSocketChannel channel=new
NioSocketChannel();
可以用,你可以试试
huanglen 1-03 19:54
3. android 怎么使用netty
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty是一个基于NIO的客户,服务器端编程框架,它在socket的基础上根据各种常用的应用协议又进一步封装,提供更便利的接口。如果需要快速搭建一个C/S服务框架,那Netty过来用是没错。反过来你的情况是需要学习这个课程,你应该掌握基本的socket编程及其通信原理,所以学习时直接用socket编程比较好。也许哪一天,你灵感来了,编出一个比Netty更好的框架,一个更牛的软件。
4. android中netty使用udp连接能发送数据,
我的也是,不知道怎么回事,在普通java工程中去连接就没问题,在android中就是连接超时
5. android 支持netty吗
这个是支持的。
什么是netty,有兴趣的朋友可以google一下netty,可以知道这东东做什么用,当然你也可以选择mina,一样的都是java nio框架.
选择netty是支持protobuf(google内部使用频率比较高的,之前的android源码中内含有这一部分的代码)协议,这样可以解决网络编程中粘包(也可以理解成传输过程中长度的问题,有兴趣可以看相关文章).
6. netty4 能不能运行在android上
Android端没必要用Netty。Netty主要是解决服务器开发的问题。~如果你认可我的回答,请及时点击【采纳为满意回答】按钮~~手机提问的朋友在客户端右上角评价点【满意】即可。~你的采纳是我前进的动力~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。
7. 怎么在android中调用netty的方法发送消息
javaScript函数中执行C#代码中的函数: 方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2、在前台写一个js函数,内容为document.getElementById("btn1").click(); 3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数; 方法二:1、函数声明为public 后台代码(把public改成protected也可以) public string ss() { return("a"); } 2、在html里用<%=fucntion()%>可以调用 前台脚本 <script language=javascript> var a = "<%=ss()%>"; alert(a); </script> 方法三:1、<script language="javascript"> <!-- function __doPostBack(eventTarget, eventArgument) { var theForm = document.Form1; //指runat=server的form theForm.__EVENTTARGET.value = eventTarget; theFrom.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } --> </script> <input id="Button1" type="button" name="Button1" value="按钮" onclick="javascript:__doPostBack('Button1','')"> 方法四:<script language="javascript"> function SubmitKeyClick() { if (event.keyCode == 13) { event.cancelBubble = true; event.returnValue = false; document.all.FunName.value="你要调用的函数名"; document.form[0].submit(); } } </script> <INPUT onkeypress="SubmitKeyClick()" id="aaa" type="text"> <input type="hidden" name="FunName"> 〈!--用来存储你要调用的函数 --〉 在.CS里有: public Page_OnLoad() { if (!Page.IsPost()) { string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:""; //根据传回来的值决定调用哪个函数 switch(strFunName) { case "enter()": enter() ; //调用该函数 break; case "其他": //调用其他函数 break; default: //调用默认函数 break; } } } public void enter() { //……比如计算某值 }
8. netty4 能不能运行在android上
netty一般都是在服务器端运行的,android可以通过http请求访问服务器端,实现APP的开发
相比Netty3, Netty4有很多显着的变化:
NioEventLoopGroup 是一个处理I/O操作的多线程事件环。即为Netty4里的线程池,在3.x里,一个Channel是由ChannelFactory创建的,同时新创建的Channel会自动注册到一个隐藏的I/O线程。 4.0使用新的名为EventLoopGroup的接口来替换ChannelFactory,它由一个或多个EventLoop来构成。一个新的 Channel不会自动注册到EventLoopGroup,但用户可以显式调用EventLoopGroup.register()来注册。在Server端的Bootstrap参数中,有两个EventLoopGroup,第一个通常称为'boss',用于接收发来的连接请求。第二个称为'worker',,用于处理boss接受并且注册给worker的连接中的信息。
ChannelInitializer是一个特殊的handler,用于方便的配置用户自定义的handler实现,如代码中所示。在channelRegistered的生命周期中会触发用户复写的initChannel(C ch)方法,并且在调用后会讲自身从channelPipeline中移除。
9. Netty在Android中使用
在添加初始化 .addLast(new ChannelHandle(ConnectService.this)); 的ChannelHandle 类中重写超时回调方法
连接失败回调
连接错误回调
出现问题的原因2:没有处理粘包拆包问题 解决方法:
添加包的接收处理: addLast(new SimpleProtocolDecoder()) 解包处理避免粘包的主要步骤是:1.解协议头 2.解包长 3.读指定的包长后返回