0

MessageHandlersからではなく、サーバー自体からメッセージを送信するにはどうすればよいですか?InetSocketAddressを知っているので、MessageHandlerから保存しましたが、ソケットを直接使用する方法がわかりません。

例えば:

public class QuoteOfTheMomentServer {

    private final int port;

    public QuoteOfTheMomentServer(int port) {
        this.port = port;
    }

    Bootstrap b;

    public void run() throws Exception {
        b = new Bootstrap();
        try {
            b.group(new NioEventLoopGroup())
             .channel(NioDatagramChannel.class)
             .option(ChannelOption.SO_BROADCAST, true)
             .handler(new QuoteOfTheMomentServerHandler());

            b.bind(port).sync().channel().closeFuture().await();
        } finally {
            b.shutdown();
        }
    }

    public static void main(String[] args) throws Exception {
        int port;
        if (args.length > 0) {
            port = Integer.parseInt(args[0]);
        } else {
            port = 8080;
        }
        new QuoteOfTheMomentServer(port).run();
    }
}

どうすれば次のようなメソッドを追加できますか

public void sendMessage(ByteBuf msg, InetSocketAddr addr) {
    b.send(msg, addr);
}
4

2 に答える 2

2

チャネルへの参照を保存して使用するだけです。

channel.write(new DatagramPacket(
                Unpooled.copiedBuffer("QOTM?", CharsetUtil.UTF_8),
                new InetSocketAddress(ip, port)));

任意のスレッドから、またハンドラーの外部から channel.write を呼び出すことができます

于 2013-03-16T07:15:56.410 に答える