Netty服务端可以通过ChannelHandlerContext对象向客户端发送数据。在处理客户端连接时,服务端会创建一个ChannelHandlerContext对象,可以通过这个对象获取到当前连接的Channel,并向客户端发送数据。
以下是一个简单的示例代码,演示了如何向客户端发送数据:
import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; public class ServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelActive(ChannelHandlerContext ctx) { // 连接建立时发送数据 String message = "Hello, client!"; ByteBuf buf = Unpooled.buffer(message.length()); buf.writeBytes(message.getBytes()); ctx.writeAndFlush(buf); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { // 接收客户端发送的数据 ByteBuf in = (ByteBuf) msg; byte[] data = https://www.yisu.com/ask/new byte[in.readableBytes()];"Received message from client: " + message); // 回复客户端 String response = "Message received!"; ByteBuf responseBuf = Unpooled.buffer(response.length()); responseBuf.writeBytes(response.getBytes()); ctx.writeAndFlush(responseBuf); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // 发生异常时关闭连接 cause.printStackTrace(); ctx.close(); } }
在上面的代码中,我们重写了ChannelInboundHandlerAdapter的channelActive方法,在连接建立时向客户端发送数据。在channelRead方法中接收客户端发送的数据,并回复客户端。当发生异常时,我们关闭连接。
需要注意的是,在Netty中,数据通常是以ByteBuf对象来表示的,需要将数据转换成字节数组进行读写操作。在向客户端发送数据时,需要使用ChannelHandlerContext的writeAndFlush方法。