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();
}
}
分享到:
相关推荐
标题"Java Netty客户端与服务器"表明我们将探讨如何使用Netty构建一个简单的服务器和客户端系统,其中客户端能够发送消息到服务器,而服务器则会给予响应。这种通信模式在许多分布式系统中非常常见,例如聊天应用、...
客户端(ChatClient)部分则涉及到如何连接到服务器,创建一个通道,并在连接成功后设置接收和发送消息的逻辑。同样,客户端也需要配置ChannelPipeline,但可能侧重于编码和解码用户输入的消息,然后通过`channel....
这通常意味着代码可能包括基础示例,用于演示如何在C#环境中设置Netty客户端和服务器,并实现双向通信,即两个端点都能发送和接收数据。 从文件名称列表来看,我们可以推测项目可能包含以下内容: 1. `UpgradeLog....
运行服务器端的启动类,然后运行客户端的启动类,客户端将会发送一个自定义的消息到服务器,服务器接收到消息后,通过自定义的编解码器解析,然后返回相同格式的消息给客户端。客户端接收到消息后,同样通过自定义的...
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码
随着物联网的发展,随之出现了各种传感器监测数据的实时发送,需要和netty服务器通讯,netty和传感器之间需要保持长连接(换句话说,netty和gateway之间都会主动给对方发送消息) 碰到的问题: netty作为服务器端如何...
在这个“netty客户端与服务器信息交互demo”中,我们将深入探讨Netty如何实现客户端和服务器之间的信息交换。 首先,让我们理解Netty的基本架构。Netty的核心是它的事件驱动模型,它基于Java的NIO(非阻塞I/O)库。...
标题中的“Netty实现Java服务端和C#客户端联通”是指使用Netty作为Java服务器框架,与C#客户端(使用DotNetty库)进行通信的一种技术实现。这涉及到跨平台的网络通信,以及两个不同编程语言间的交互。 Netty是Java...
在本示例中,"model对象目录必须一致"意味着服务端和客户端需要使用相同的类来序列化和反序列化数据,确保双方可以正确理解和交换消息。 服务端实现: 1. **Bootstrap**:服务端启动器,配置服务器的各种参数,如...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 4 实现多线程的消息分发,这对于构建分布式系统、游戏服务器或者...
这个demo包含了Netty服务器(NettyServer)和Netty客户端(NettyClient),下面我们将详细探讨这两个组件以及它们如何协同工作。 首先,让我们从服务器端开始。在Spring Boot应用中集成Netty,通常会创建一个自定义...
在Netty中,我们可以设置一个定时任务,定期发送心跳包到对端,如果在一定时间内没有收到对方的心跳回应,就认为连接已经失效,触发重连操作。心跳包通常包含简单的标识信息,如特定的字节序列,以区分于普通业务...
在本教程中,我们将深入探讨如何构建一个Netty客户端。 首先,理解Netty的基础架构至关重要。Netty的核心是其NIO(非阻塞I/O)模型,它利用Java的Selector和Channel来实现高效的I/O操作。Selector允许单个线程监听...
- **EchoClientHandler**:客户端处理器,负责发送数据到服务端,并接收服务端回显的数据。 在实际应用中,开发者通常会创建自定义的 ChannelHandler 实现,以处理特定的协议解析、业务逻辑和异常处理。例如,如果...
在本教程"04.Netty客户端实现接服务器收响应数据"中,我们将深入学习如何利用Netty框架构建一个能够接收服务器响应数据的客户端。 首先,我们需要了解Netty的基本架构。Netty采用了一种称为“Reactor”模式的设计,...
这样,当某客户端发送消息时,服务端可以通过 ChannelGroup 广播消息到所有其他客户端,实现多用户间的实时聊天。 总的来说,这个“netty3 客户端 服务端聊天”示例展示了如何利用 Netty 3 构建一个简单的聊天系统...
通过netty编写文件传输的客户端与服务端,以及协议说明, 通用的netty传输协议 通过该协议进行文件传输 文件传输客户端与服务端 可以根据文件的最后更新时间来增量传输文件 源码开放,通过eclipse或者idea导入代码...
在"基于Java Netty的UDP客户端声呐数据对接"项目中,我们主要关注如何利用Netty处理UDP通信,以及如何解析和封装SCANFISH-II型声呐系统的数据。 UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证...
Netty客户端: 1. **连接与重连机制**:客户端负责与服务端建立连接,并持续监听服务端的数据。在遇到网络故障导致连接断开时,客户端应自动尝试重新连接,以保证服务的连续性和可用性。 2. **心跳机制**:为了检测...
在Android环境中,由于安全和权限限制,我们通常需要在后台服务中运行Netty服务器,而在Activity或Service中创建Netty客户端。通过Handler进行主线程和网络线程之间的数据交互,确保UI更新的及时性和线程安全性。 ...