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 = new byte[in.readableBytes()];
in.readBytes(data);
String message = new String(data);
System.out.println("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方法。