错误:
1.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /127.0.0.1:8080
第一个错是没有启动 server 端
2.Caused by: java.net.ConnectException: Connection refused: no further information:/127.0.0.1:8080
代码:
public void bind(int port) {
EventLoopGroup mainGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(mainGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(new NettyHeartbeatServerHandler());
}
});
ChannelFuture future = serverBootstrap.bind(port).sync();
/**这没有加sync()方法造成的*/
future.channel().closeFuture();
} catch (Exception e) {
e.printStackTrace();
} finally {
mainGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
3.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /127.0.0.1:8080
public void bind(int port) {
EventLoopGroup mainGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(mainGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(new NettyHeartbeatServerHandler());
}
});
/***模拟的一个异常**/
int i = 10/0;
ChannelFuture future = serverBootstrap.bind(port).sync();
future.channel().closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
mainGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
/这里是我的代码报错点,netty-all 4.1.50Final 仅参照***/
~ server端
public void bind(int port) {
EventLoopGroup mainGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(mainGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(new NettyHeartbeatServerHandler());
}
});
ChannelFuture future = serverBootstrap.bind(port).sync();
future.channel().closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
mainGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
~ protobuf
pom.xml
<!--netty -->
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.50.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.12.2</version>
</dependency>
<!--netty -->
安装windows - protoc
下载 : https://github.com/google/protobuf/releases
1.解压protoc-3.12.3-win64.zip
2.配置环境变量:F:\pro\protoc-3.12.3-win64\bin
3.将protoc.exe拷贝到C:\Windows\System32
4.在cmd下执行 protoc --version 或 protoc --help查看
创建UserProto.proto
syntax = "proto2";
package protocol;
option java_package = "com.jxfj.protoful"; //记得改成你的java文件生成路径
option java_outer_classname = "UserProto";
message UserProtocol {
required string id = 1;
required string name = 2;
}
这个文件放置位置,找得到就好,就好。
在cmd或idea terminal下 执行:
protoc --java_out=./netty/src/main/java ./netty/protobuf/UserProto.proto
// ./netty/src/main/jav 生成java的package位置
// ./netty/protobuf/UserProto.proto 上图给你画红框的位置
生成 Useproto.java完成。
~~ 好好奇下面这个类怎么生成的 特别是心跳协议部分~~
怎么做啊?
package com.snowcattle.game.message.auto.http.client;
public final class OnlineClientHttpProBuf {
private OnlineClientHttpProBuf() {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface OnlineHeartClientHttpProBufOrBuilder extends
// @@protoc_insertion_point(interface_extends:OnlineHeartClientHttpProBuf)
com.google.protobuf.MessageOrBuilder {
/**
* <code>required int32 id = 1;</code>
*/
boolean hasId();
/**
* <code>required int32 id = 1;</code>
*/
int getId();
}
/**
* <pre>
*心跳协议
* </pre>
*
* Protobuf type {@code OnlineHeartClientHttpProBuf}
*/
public static final class OnlineHeartClientHttpProBuf extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:OnlineHeartClientHttpProBuf)
OnlineHeartClientHttpProBufOrBuilder {
// Use OnlineHeartClientHttpProBuf.newBuilder() to construct.
private OnlineHeartClientHttpProBuf