android中使用Netty当客户端时候出现以下错误连接不上

Caused by: io.netty.channel.ChannelException: Failed to open a socket.
at io.netty.channel.socket.nio.NioSocketChannel.newSocket(NioSocketChannel.java:63)
at io.netty.channel.socket.nio.NioSocketChannel.(NioSocketChannel.java:80)
at io.netty.channel.socket.nio.NioSocketChannel.(NioSocketChannel.java:73)
at java.lang.Class.newInstance(Native Method)
at io.netty.channel.ReflectiveChannelFactory.newChannel(ReflectiveChannelFactory.java:38)
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:319) 
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:163) 
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:119) 
at com.client.Client.connect(Client.java:43) 
at com.example.shx.serachnote.Main.onCreate(Main.java:43) 
at android.app.Activity.performCreate(Activity.java:6664) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6077) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Caused by: java.net.SocketException: Permission denied
at sun.nio.ch.Net.socket0(Native Method)
at sun.nio.ch.Net.socket(Net.java:433)
at sun.nio.ch.Net.socket(Net.java:426)
at sun.nio.ch.SocketChannelImpl.(SocketChannelImpl.java:107)
at sun.nio.ch.SelectorProviderImpl.openSocketChannel(SelectorProviderImpl.java:60)
at io.netty.channel.socket.nio.NioSocketChannel.newSocket(NioSocketChannel.java:61)
at io.netty.channel.socket.nio.NioSocketChannel.(NioSocketChannel.java:80) 
at io.netty.channel.socket.nio.NioSocketChannel.(NioSocketChannel.java:73) 
at java.lang.Class.newInstance(Native Method) 
at io.netty.channel.ReflectiveChannelFactory.newChannel(ReflectiveChannelFactory.java:38) 
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:319) 
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:163) 
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:119) 
at com.client.Client.connect(Client.java:43) 
at com.example.shx.serachnote.Main.onCreate(Main.java:43) 
at android.app.Activity.performCreate(Activity.java:6664) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6077) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

2个回答

打开socket错误,权限没有声明,在AndroidManifest.xml文件中加入权限



当然 如果你是通过wifi连接socket的话记得开wifi的权限

 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
netty客户端连接附带信息

netty客户端连接服务端时,怎么附带一些信息,比如id等,客户端、服务端代码怎么实现啊?

netty客户端与服务端连接后的通信

最近做的项目学习netty,时间紧来不及学,希望请教大家一些问题, 1.netty的客户端与服务端建立长连接后,客户端如何与服务端通信?要随心所欲发送自定义的消息? 2.netty的自定义编码器,解码器,希望也能得到帮助, 3.第一个问题为主要问题。 数据包结构: 包头:2字节 0ddd 0fff。 消息体:全部为文本(ASCII码),汉字是GB2312编码。 包尾:2字节 0xxx 0aaa。 最后,先感谢每一位浏览解答的朋友,我会多多赠送C币给那些乐于帮助的人。 补充一些: 我是客户端,需要与服务端长连接;接通后需要发送登陆消息数据包; 每30秒发送一条链路数据 这些我熬夜两天,时间太紧张,希望大家不吝指教。

netty为啥主动关闭客户端链接,求大牛指点

netty服务器启动后,客户端1600多个设备会主动连接上。 查看前几天的日志发现,时不时会有断开连接 关闭连接日志打印出来,也就是会调用netty的channelInactive 和 handlerRemoved 方法 ![图片说明](https://img-ask.csdn.net/upload/201711/02/1509593962_815809.png)![图片说明](https://img-ask.csdn.net/upload/201711/02/1509594004_151738.png) 当然也不排除是客户端主动断开的行为,但是直到昨天服务器直接挂掉了。 出现很奇怪的现象,当所有的设备连接上去的时候,过了几分钟就主动把客户端的连接T掉。![图片说明](https://img-ask.csdn.net/upload/201711/02/1509594204_993757.png)![图片说明](https://img-ask.csdn.net/upload/201711/02/1509596199_498810.png)![图片说明](https://img-ask.csdn.net/upload/201711/02/1509596465_671319.png) 在网上查了很多调优方案,但还是解决不了这个问题。服务器用的是阿里云Linux 64位,配置是双核 8G内存 5M带宽。现在就差没把服务器的配置提升了。客户端连接的时候我也监控过CPU和内存的使用都是够的,应该不会1600个socket连接承受不了吧。 已经找这个问题找了一天一夜了,不知道是哪里出了问题。求大神指导思路

netty服务端怎么打印与其连接的客户端的id?

netty服务端怎么打印与其连接的客户端的id?netty服务端怎么打印与其连接的客户端的id?netty服务端怎么打印与其连接的客户端的id?

Netty服务端和客户端的连接保持只有一个

在实现了服务端和客户端的连接后,客户端每次重启后都和服务端进行重连,导致了一堆的channle 的出现。但是只有一个最后一次的channel是有用的,其他都在timeout的时候回收。但是本身建立这么多channel是很费资源的,我如何保证一个客户端只和服务端建立一个长连接,其他都无法建立起来呢。我现在实现的框架是netty,请高手指点

netty5.0客户端发送消息,服务器端接收失败

package com.vc.netty.simplechat.client; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import java.io.BufferedReader; import java.io.InputStreamReader; public class SimpleChatClient { public static void main(String[] args) throws Exception{ new SimpleChatClient("127.0.0.1", 9833).run(); } private final String host; private final int port; public SimpleChatClient(String host, int port){ this.host = host; this.port = port; } public void run() throws Exception{ EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap bootstrap = new Bootstrap() .group(group) .channel(NioSocketChannel.class) .handler(new SimpleChatClientInitializer()); Channel channel = bootstrap.connect(host, port).sync().channel(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("["+in.readLine()+"]"); while(true){ channel.writeAndFlush(in.readLine() + "\r\n"); } } catch (Exception e) { e.printStackTrace(); } finally { group.shutdownGracefully(); } } } 以上是客户端代码。 ********************************************************** /** * @author vc DateTime 2015年3月30日 下午2:06:01 * @version 1.0 */ package com.vc.netty.simplechat.client; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; public class SimpleChatClientHandler extends SimpleChannelInboundHandler<String> { // @Override // protected void channelRead0(ChannelHandlerContext ctx, String s) throws Exception { // System.out.println(s); // } /*@Override public void channelRead(ChannelHandlerContext ctx, Object obj) throws Exception { System.out.println(ctx.toString()); System.out.println(obj.toString()); };*/ @Override protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception { System.out.println(msg); } } 以上是clientHandler代码 ************************************************************** package com.vc.netty.simplechat.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; public class SimpleChatServer { private int port; public SimpleChatServer(int port) { this.port = port; } public void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1) EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (2) b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) // (3) .childHandler(new SimpleChatServerInitializer()) //(4) .option(ChannelOption.SO_BACKLOG, 128) // (5) .childOption(ChannelOption.SO_KEEPALIVE, true); // (6) System.out.println("SimpleChatServer 启动了"); // 绑定端口,开始接收进来的连接 ChannelFuture f = b.bind(port).sync(); // (7) // 等待服务器 socket 关闭 。 // 在这个例子中,这不会发生,但你可以优雅地关闭你的服务器。 f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); System.out.println("SimpleChatServer 关闭了"); } } public static void main(String[] args) throws Exception { int port; if (args.length > 0) { port = Integer.parseInt(args[0]); } else { port = 9833; } new SimpleChatServer(port).run(); } } 以上是服务器端代码 ****************************************************************** package com.vc.netty.simplechat.server; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup; import io.netty.util.concurrent.GlobalEventExecutor; public class SimpleChatServerHandler extends SimpleChannelInboundHandler<String> { // (1) public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); @Override public void handlerAdded(ChannelHandlerContext ctx) throws Exception { // (2) Channel incoming = ctx.channel(); for (Channel channel : channels) { channel.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 加入\n"); } channels.add(ctx.channel()); } @Override public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { // (3) Channel incoming = ctx.channel(); for (Channel channel : channels) { channel.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 离开\n"); } channels.remove(ctx.channel()); } // @Override // protected void channelRead0(ChannelHandlerContext ctx, String s) throws Exception { // (4) // Channel incoming = ctx.channel(); // for (Channel channel : channels) { // if (channel != incoming){ // channel.writeAndFlush("[" + incoming.remoteAddress() + "]" + s + "\n"); // } else { // channel.writeAndFlush("[you]" + s + "\n"); // } // } // } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // (5) Channel incoming = ctx.channel(); System.out.println("SimpleChatClient:"+incoming.remoteAddress()+"在线"); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { // (6) Channel incoming = ctx.channel(); System.out.println("SimpleChatClient:"+incoming.remoteAddress()+"掉线"); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (7) Channel incoming = ctx.channel(); System.out.println("SimpleChatClient:"+incoming.remoteAddress()+"异常"); // 当出现异常就关闭连接 cause.printStackTrace(); ctx.close(); } @Override protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception { Channel incoming = ctx.channel(); for (Channel channel : channels) { if (channel != incoming){ channel.writeAndFlush("[" + incoming.remoteAddress() + "]" + msg + "\n"); } else { channel.writeAndFlush("[you]" + msg + "\n"); } } } } 以上是serverHandler代码 ```

Netty服务端如何保持稳定的长连接

有一个项目用到了netty来搭建服务端,主要是接入大量的客户端(目前有500多个客户端的接入),与服务端进行来消息的传送。但是,项目运行到一定时间后(大概10来天左右),链路channel就处于一种inactive的状态,导致客户端与服务端无法正常接收发送消息。重启netty server 后,链路又正常连接,又过一端时间后,又出现了上诉的问题。有哪位有经验的大神,能说一下这是什么情况吗?

netty 如何设置客户端连接超时时间?希望路过的大神留下宝贵的意见!

1:netty 客户端设置连接超时时间,在规定的时间内如果没有连接到服务端视为网络异常,进行跳过处理。 2:我曾试过bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000); 可是这段代码没有起作用,代码如下: 工作线程池组 EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); Bootstrap bootstrap = new Bootstrap(); bootstrap.group(eventLoopGroup)// //设置线程池 .channel(NioSocketChannel.class)// 设置socket工厂 // .option(ChannelOption.TCP_NODELAY, true) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 9000)// 设置超时时间 .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { ChannelPipeline pipeline = socketChannel.pipeline(); // 处理类 pipeline.addLast(new EchoClientHandler()); } }); try { // 发起连接操作 ChannelFuture future = bootstrap.connect(host, port); // 连接若异常发起3次重新连接 i++; if (i <= 3) { // 启动时连接超时重试 future.addListener(new ConnectionListener(i)); } // 等待客户端链路关闭 future.channel().closeFuture().sync(); } catch (InterruptedException e) { } finally { // 优雅退出,释放线程池资源 eventLoopGroup.shutdownGracefully(); } 对于这个问题该如何解决呢?

Netty多线程客户端服务器端通信

现在实现了Netty客户端服务器端编码解析json格式数据,如何是用多线程进行客户端服务器端的通信?进行tps统计? 有没有有经验的大佬点拨一下?

netty服务端接收报文由于客户端计算长度错误阻塞在decoder中

代码是这个逻辑,传输内容的前8位代表长度,获取长度后,在收到信息的长度等于获取到的内容长度时。将信息添加处理。但是如果客户端调用时计算长度错误,就会在这里阻塞。这个情景使用IdleStateHandler 时无法进行超时处理的。该如何才能够设置这个超时呢。 ``` protected void decode(ChannelHandlerContext context, ByteBuf byteBuf, List<Object> list) { int length = byteBuf.readableBytes(); if(length==0) return; byte[] message = new byte[length]; byteBuf.readBytes(message); if (content != null) { System.arraycopy(message,0,content,receiveLength+8,length); } receiveLength +=length; //如果还没获取总长度 if (xmlLength == 0) { byte[] l= Arrays.copyOf(message,8); xmlLength = Integer.parseInt(new String(l)); content=new byte[xmlLength+8]; System.arraycopy(message,0,content,0,length); } if (xmlLength == receiveLength) { //将报文信息打印到控制台查看 if(content!=null) { String recv = new String(content, StandardCharsets.UTF_8); log.info("收到报文:" + recv); log.info("总长度:[" + xmlLength + "] 接收长度:[" + receiveLength + "]"); list.add(recv); } } } ```

Netty 客户端如何检测服务端断开了呢

Netty4 在客户端中如何能够知道服务端关闭了呢? 在客户端发送完消息后,同时得到了服务端的响应,Channel.isActive()返回的是false?各位有知道么?

netty 系统空闲一段后,客户端与服务端的链接会自动断开如何处理

大伙有没有出现过这样的问题。用netty做集群服务器,包括客户端(clientBootstrap)和服务端(serverBootstrap),系统空闲3个多小时候,客户端与服务端的连接会自动断开(“远程主机强迫关闭了一个现有的连接”),系统重新后连接报异常: java.lang.IllegalArgumentException: promise already done: DefaultChannelPromise@2038329b(failure(java.util.concurrent.CancellationException) at io.netty.channel.DefaultChannelHandlerContext.validatePromise(DefaultChannelHandlerContext.java:806) at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:477) at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:467) at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:847) at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:199) at io.netty.bootstrap.Bootstrap$2.run(Bootstrap.java:165) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) at java.lang.Thread.run(Unknown Source) 最后: Caused by: java.net.NoRouteToHostException: No route to host: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:191) at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:279) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:461) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:378) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) 请问这个问题如何解决,我有做心跳处理,客户端每个几秒会请求服务端,这样都还会自动断开连接,好郁闷....

netty客户端向远程服务端发送数据包

首先,感谢每一位来关注的IT前辈,真诚希望您提出宝贵的意见。 我需要的效果: 1.客户端与服务端长连接TCP通信; 2.客户端通过自定义解码器,解析服务端返回的数据包; 3.客户端在服务端返回连接结果后,发送登录请求数据包,需要对数据自定义编码器解析; 4.因为是长连接,服务不能断,还需要发送登陆请求,以及其他验证消息。很重要。 **数据包结构:** 1.固定包头2字节; 2.消息体,全部为文本(ASCII码),汉字是GB2312编码。 3.固定包尾2字节; 我目前代码: public class TCPClient { public void connect(int port,String host)throws Exception{ //网络事件处理线程组 EventLoopGroup group=new NioEventLoopGroup(); //配置客户端启动类 Bootstrap b=new Bootstrap(); b.group(group).channel(NioSocketChannel.class) .option(ChannelOption.TCP_NODELAY, true)//设置封包 使用一次 大数据的写操作,而不是多次小数据的写操作 .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast("decoder",new DealMsg()); //设置自定义解码器 ch.pipeline().addLast("encoder",new MsgEncode()); //设置自定义编码器 ch.pipeline().addLast(new TCPClientHandler()); //设置客户端网络IO处理器 } }); //连接服务器 同步等待成功 ChannelFuture f = b.connect(new InetSocketAddress(host,port)); //同步等待客户端通道关闭 // f.channel().closeFuture().sync(); //不关闭会发生阻塞 Channel channel = f.sync().channel(); Scanner scanner = new Scanner(System.in); while(true){ System.out.println("请输入"); CarData carData = new CarData(); String line = scanner.nextLine(); carData.setBody(line); //发送请求 channel.writeAndFlush(carData); } //释放线程组资源 // group.shutdownGracefully(); } } public class TCPClientHandler extends ChannelHandlerAdapter { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.println("通信异常!!"); cause.printStackTrace(); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println("链接服务端成功!"); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { System.out.println("退出链接!!"); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { System.out.println("接受服务器数据:【 "+msg); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.channel().writeAndFlush("数据读取完成!"); } }

Netty5客户端第二次连接服务端异常

用Netty5开发通信框架时出现客户端强制关闭程序,服务端捕获到客户端断开连接并关闭channel;客户端再次启动程序连接服务端会连接不上 服务端代码: ![启动服务](https://img-ask.csdn.net/upload/201607/09/1468037617_277162.png) 服务端handler: ![服务端handler:](https://img-ask.csdn.net/upload/201607/09/1468038034_658063.png) 客户端代码: ![启动客户端](https://img-ask.csdn.net/upload/201607/09/1468038203_298005.png) 客户端handler: ![客户端handler](https://img-ask.csdn.net/upload/201607/09/1468038310_93974.png) 先启动服务端,等待客户端连接 第一次启动客户端建立连接,连接建立时客户端正常调用channelActive方法发送数据,服务端正常接口数据并返回响应,客户端正常接收响应。当客户端程序执行完成,关闭程序,服务端可以捕获到客户端断开的信息: ![服务端成功捕获客户端断开](https://img-ask.csdn.net/upload/201607/09/1468038938_389467.png) 服务端捕获客户端断开后作出处理,清理channel并关闭ChannelHandlerContext并抛出异常: ![客户端断开连接后服务端抛出的异常](https://img-ask.csdn.net/upload/201607/09/1468039139_985584.png) 再次启动客户端程序连接服务端,程序依然可以进到channelActive发送消息,(channelActive触发是否可以确定已经建立了TCP连接?) ![第二次连接依然可以触发channelActive](https://img-ask.csdn.net/upload/201607/09/1468039445_679816.png) 然而虽然已经向服务端writeAndFlush,但是服务端并没有收到任何消息,客户端会抛出异常: ![客户端第二次启动抛出的异常](https://img-ask.csdn.net/upload/201607/09/1468040066_459885.png) 跟踪异常,是客户端在向chennal写数据时抛出错误! 为什么我服务端已经清理了客户端信息并关闭了通道,客户端程序第二次连接发送数据会出现异常呢? 求大神解答!

使用其它客户端软件为何接收不了netty服务端返回的数据呢

我编了一个java程序,功能是实现netty的服务端,开启9400端口接收数据。 ``` public class echoServer { private int port; public echoServer(int port) { this.port = port; } public void start() { EventLoopGroup boosGroup = new NioEventLoopGroup(1); //bossGroup EventLoopGroup workerGroup = new NioEventLoopGroup(); //workGroup try{ServerBootstrap sbs = new ServerBootstrap().group(boosGroup, workerGroup) .channel(NioServerSocketChannel.class) .localAddress(new InetSocketAddress(port)) .childHandler(new ChannelInitializer<SocketChannel>() { protected void initChannel(SocketChannel ch) { ch.pipeline().addLast("decoder", new StringDecoder()); ch.pipeline().addLast("encoder", new StringEncoder()); ch.pipeline().addLast(new echoServerHandler()); } }).option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); ChannelFuture future = sbs.bind(port).sync(); System.out.println("Server start listen at " + port); future.channel().closeFuture().sync(); } catch (Exception e) { boosGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } public static void main(String[] args) { new echoServer(9400).start(); } } ``` 客户端使用的软件为Insomnia,向9400端口发送一个消息。 想尝试将服务端接收到的消息原样返回给Insomnia。 ``` public class echoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { System.out.println("Server channelRead...."); System.out.println(ctx.channel().remoteAddress()+"->Server :"+msg.toString()); ctx.write("Server write"+msg); //原样返回 ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } } ``` 但却失败了 ![图片说明](https://img-ask.csdn.net/upload/201904/06/1554541837_482996.png) 想问一问具体原因是什么? 以及请问如何解决?

netty如何解决一个应用既作为客户端又作为服务端的问题?

netty如何解决一个应用既作为客户端又作为服务端的问题? 一个通讯链路中有三个应用,A,B,C;A只作为客户端,B既为A的服务端,又作为C的客户端,而C为B的服务端; 通讯链路为A—B—C,C的返回信息经B处理后再返回给A。 如果有实例代码,最好能帮忙给个链接,非常感谢!

java socket客户端连接基于netty4的服务端连接成功后如何接受到服务的响应数据?

在client连接netty4服务器后,能够发送数据,并且服务器也能够接受到,但是返回消息时,client无法接收; 在使用while(true)后只能持续发送消息,无法读取服务端返回的消息。

netty长连接服务器断开后,客户端如何重新连接

private final static Logger logger = LoggerFactory.getLogger(ResourceStatusReceiver.class); private static Bootstrap b = new Bootstrap(); public static void start() throws Exception { EventLoopGroup workerGroup = new NioEventLoopGroup(); try { // b = new Bootstrap(); // (1) b.group(workerGroup); // (2) b.channel(NioSocketChannel.class); // (3) b.option(ChannelOption.SO_KEEPALIVE, true); // (4) b.option(ChannelOption.ALLOW_HALF_CLOSURE,true); b.handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); // 以("\n")为结尾分割的 解码器 pipeline.addLast("framer", new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter())); // 字符串解码 和 编码 pipeline.addLast("decoder", new StringDecoder()); pipeline.addLast("encoder", new StringEncoder()); // 自己的逻辑Handler pipeline.addLast("handler", new SimpleChannelInboundHandler() { @Override protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception { logger.debug("接收到的状态内容:" + o.toString()); } @Override public void channelRegistered(ChannelHandlerContext ctx) throws Exception { logger.debug("连接成功"); } @Override public void channelUnregistered(ChannelHandlerContext ctx) throws Exception { } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { logger.debug("======channelActive========"); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { logger.debug("======channelInactive========"); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { logger.debug("======exceptionCaught========"+cause.getMessage()); } }); } }); // Start the client. ChannelFuture f = b.connect("127.0.0.1",8060).sync(); // (5) // Wait until the connection is closed. f.channel().closeFuture().sync(); }finally{ workerGroup.shutdownGracefully(); } }

netty 开发问题,客户端发了请求后收不到响应

package org.netty_client; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; public class Client { public void connect(String host,int port) { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap strap = new Bootstrap(); strap.group(group); strap.channel(NioSocketChannel.class); strap.option(ChannelOption.TCP_NODELAY, true); strap.handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel arg0) throws Exception { arg0.pipeline().addLast(new ClientHandler()); } }); ChannelFuture future = strap.connect(host, port).sync(); future.channel().closeFuture().sync(); System.out.println("close"); } catch (InterruptedException e) { e.printStackTrace(); }finally { group.shutdownGracefully(); } } public static void main(String[] args) { new Client().connect("127.0.0.1", 8080); } } package org.netty_client; import java.io.UnsupportedEncodingException; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; public class ClientHandler extends ChannelHandlerAdapter{ private ByteBuf buf; public ClientHandler() { String r = "first request"; byte[] req = r.getBytes(); buf = Unpooled.buffer(req.length); buf.writeBytes(req); System.out.println("send request:" + r); } public void channelActive(ChannelHandlerContext ctx) { ctx.writeAndFlush(buf); } public void channelkRead(ChannelHandlerContext ctx,Object msg) throws UnsupportedEncodingException { System.out.println(1); ByteBuf buf = (ByteBuf)msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("receive response:" + body); } public void exceptionCaught(ChannelHandlerContext ctx,Throwable e) { e.printStackTrace(); ctx.close(); } } package org.netty_server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; public class Server { public void bind(int port) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap server = new ServerBootstrap(); server.group(bossGroup,workerGroup); server.channel(NioServerSocketChannel.class); server.option(ChannelOption.SO_BACKLOG, 1024); server.childHandler(new ChannelInitializer<SocketChannel>(){ @Override protected void initChannel(SocketChannel arg0) throws Exception { arg0.pipeline().addLast(new ServerHandler()); } }); ChannelFuture future = server.bind(port).sync(); System.out.println("启动服务端口:" + port); future.channel().closeFuture().sync(); System.out.println("close"); } catch (InterruptedException e) { e.printStackTrace(); }finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } public static void main(String[] args) { new Server().bind(8080); } } package org.netty_server; import java.io.UnsupportedEncodingException; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; public class ServerHandler extends ChannelHandlerAdapter{ @Override public void channelRead(ChannelHandlerContext ctx,Object msg) throws UnsupportedEncodingException { ByteBuf buf = (ByteBuf)msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("receive request:" + body); String r = "response"; byte[] re = r.getBytes(); ByteBuf resp = Unpooled.copiedBuffer(re); // resp.readBytes(re); System.out.println("send response:" + r); ctx.write(resp); } @Override public void channelReadComplete(ChannelHandlerContext ctx) { ctx.flush(); } public void exceptionCaught(ChannelHandlerContext ctx,Throwable e) { e.printStackTrace(); ctx.close(); } } 测试结果: send request:first request 启动服务端口:8080 receive request:first request send response:response 但是客户端没收到响应,有朋友能看下么,只是写个简单的例子而已

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

navicat(内含激活码)

navicat支持mysql的可视化操作,内涵激活码,不用再忍受弹框的痛苦。

HTML期末大作业

这是我自己做的HTML期末大作业,花了很多时间,稍加修改就可以作为自己的作业了,而且也可以作为学习参考

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

基于STM32的电子时钟设计

时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

零基础学C#编程—C#从小白到大咖

本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。 15大章节,228课时,1756分钟与你一同进步!

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问