netty客户端与服务端通信
/**
* 先启动Server,再启动Client
* SimpleChannelInboundHandler
*/
public class NettyServer {
private int port=8088;
public static void main(String[] args) {
NettyServer server = new NettyServer();
server.run();
}
void run() {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.localAddress(new InetSocketAddress(port))
.childHandler(new ChannelInitializer<SocketChannel>() {
public void initChannel(SocketChannel ch) {
//ch.pipeline().addLast("framer", new DelimiterBaseFrameDecoder(1024, Delimiters.lineDelimiter()));
//ch.pipeline().addLast(new SimpleSeverHandler());
ChannelPipeline p =ch.pipeline();
p.addLast("encoder", new SimpleEncoder());
p.addLast("handler", new SimpleSeverHandler());
}}
);
//.option(ChannelOption.SO_BACKLOG, 128)
//.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture f = b.bind(port).sync();
f.channel().closeFuture().sync();
}catch(Exception e) {
e.printStackTrace();
}finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
public class SimpleSeverHandler extends SimpleChannelInboundHandler {
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf in = (ByteBuf)msg;
ByteBuffer byteBuffer = in.nioBuffer();
String res = decode(byteBuffer);
System.out.println(ctx.channel().remoteAddress()+" say: "+res);
ctx.writeAndFlush("receive your message!\n");
}
//解码 ByteBuf -> String
public static String decode(final ByteBuffer byteBuffer) {
int length = byteBuffer.limit();
byte[] data = new byte[length];
byteBuffer.get(data);
String s=null;
try {
s = new String(data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return s;
}
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();
ctx.close();
}
}
public class SimpleEncoder extends MessageToByteEncoder<String> {
public void encode(ChannelHandlerContext ctx, String cmd, ByteBuf out)
throws Exception {
try {
if (cmd != null) {
out.writeBytes(cmd.getBytes());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端:
public class NettyClient {
private String host="127.0.0.1";
private int port = 8088;
public static void main(String[] args) {
new NettyClient().run();
}
public void run() {
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group).channel(NioSocketChannel.class)
.remoteAddress(new InetSocketAddress(host, port))
.handler(new ChannelInitializer<SocketChannel>() {
protected void initChannel(SocketChannel ch)throws Exception {
ch.pipeline().addLast("handler",new ClientHandler2());
}
});
ChannelFuture f = b.connect().sync();
f.channel().closeFuture().sync();
}catch(Exception e) {
e.printStackTrace();
}
finally {
try {
group.shutdownGracefully().sync();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ClientHandler2 extends SimpleChannelInboundHandler<ByteBuf>{
protected void channelRead0(ChannelHandlerContext ctx, ByteBuf buf) throws Exception {
System.out.println("client channelRead0..");
System.out.println(buf.toString(Charset.forName("utf-8")));
}
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("client channelActive..");
ctx.writeAndFlush(Unpooled.copiedBuffer("come from client?", CharsetUtil.UTF_8));
}
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
System.out.println("client channelReadComplete..");
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
}
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
System.out.println("client exceptionCaught..");
cause.printStackTrace();
ctx.close();
}
}
分享到:
相关推荐
根据给定的消息协议,自己定义一个消息类,编写好服务端与客户端,自定义好编解码器,在客户端发送此消息,服务端获取消息并向客户端发送同样格式的消息;导入Eclipse maven项目运行即可跑通。
一个服务器 一个客户端 客户端发消息给服务器,并有反馈。Eclipse开发。
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码
随着物联网的发展,随之出现了各种传感器监测数据的实时发送,需要和netty服务器通讯,netty和传感器之间需要保持长连接(换句话说,netty和gateway之间都会主动给对方发送消息) 碰到的问题: netty作为服务器端如何...
刚学netty ,写了一个基于netty的服务器客户端收发消息代码,功能非常简单,服务器每3秒向服务器发消息,服务器再把消息反给你。简单收1分,希望大家谅解。
实现Java服务端和C#客户端联通 Java使用Netty 开发环境为IDEA C#使用DotNetty 开发环境为VS2017 运行时先开启Java服务端 再开启客户端
通过netty编写文件传输的客户端与服务端,以及协议说明, 通用的netty传输协议 通过该协议进行文件传输 文件传输客户端与服务端 可以根据文件的最后更新时间来增量传输文件 源码开放,通过eclipse或者idea导入代码...
利用netty实现Modbus TCP client/server READ COILS | 0x01 READ DISCRETE INPUTS | 0x02 READ HOLDING REGISTERS | 0x03 READ INPUT REGISTERS | 0x04 WRITE SINGLE COIL | 0x05 WRITE SINGLE REGISTER | 0x06 ...
使用Netty4实现多线程的消息分发,这是一个基于netty4做的一个异步通信模型。
Android Studio 开发Netty网络访问框架,实现了客户端、服务端两种访问方式,支持发送心跳数据,使用Handler实现外部数据交互,有调用Demo,在实际项目中使用暂时没有问题
学习netty框架编写的maven项目,使用netty4.1.1.Final版本实现的netty客户端自动重连,检测链路空闲时自动发送心跳包,如没有收到返回则自动断开连接重连。先运行NettyServerBootstrap类启动Server端,再启动Netty...
Netty实现简单的客户端服务端通信示例,户端发送请求给服务端,并由服务端响应客户端请求,希望对初学Netty的同学有所帮助。
netty分隔符和定长解码器的应用
使用Netty实现的简单的聊天消息群发的工具类,支持多客户端发送消息给服务端,并由服务端将详细群发给所有的客户端,也可以在此基础上修改,实现一对一的聊天消息发送,希望对初学Netty的同学有所帮助。
在公司做项目的时候发现用Netty进行TCP/IP通信的Netty客户端接收到的数据进制乱码,经过摸索,终于成功解决了这个鸡肋的问题
这个小程序使用netty5进行udp网络通讯,客户端有两种,1:用netty5类库发送DatagramPacket和接收 2:直接使用DatagramSocket发送接收DatagramPacket 先运行netty_server的QuoteOfTheMomentServer, 在运行netty_...
本压缩包实现了一个简单的Netty应答程序,客户端发送消息,服务器端回复响应消息
http-benchmark-netty基于java...支持随机请求、支持配置线程数、客户端个数、支持压力山大发送模式。支持返回结果验证。支持qps、延迟、最大连接数等统计。支持测试报告邮件自动发送。使用:详见README。测试报告截图:
实现netty作为服务端,websocket连接成功,将channel保存到map集合,通过js发送心跳,服务端接收心跳信息并响应给客户端,当服务端断开时 客户端进行重连操作
Netty服务端与客户端,数据的发送与接收 使用:先运行TimeServer,在运行TimeClient。成功连接后,服务器发送一个时间给客户端。输出到客户端控制台 4.第三个示例 com.user_1 Netty将java对象作为数据的发送与...