0

私にはいくつかのクライアントがあり、それらは1つのサーバーと通信し、そのサーバーがメッセージを別の2番目のサーバーに転送する必要があります。次に、2 番目のサーバーからメッセージを受信し、クライアントに送信します。

この方法では、2 番目のサーバーに接続できますが、メッセージを受信せず、次の例外がスローされます。

例外: java.nio.channels.NotYetConnectedException. java.nio.channels.NotYetConnectedException

public void messageReceived(ChannelHandlerContext ctx, final MessageEvent e) throws IOException, Exception {
        response = "hola" + "\r\n";
        Main.creaLog("Mensaje recibido del conc: " + e.getMessage().toString());
        Main.creaLog("Mensaje enviado al servidor : " + response);


        ClientBootstrap bootstrap1 = new ClientBootstrap(
        new NioClientSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool()));

        // Configure the pipeline factory.
        //bootstrap1.setPipelineFactory(new CLIENTE.ClientePipelineFactory());
        bootstrap1.setPipelineFactory(new ChannelPipelineFactory() {
         public ChannelPipeline getPipeline() {
                return Channels.pipeline(new ClienteHandler());
         }
        });

        final ChannelFuture future = bootstrap1.connect(new InetSocketAddress("172.16.10.14", 12355));

        Channel channel = future.getChannel();

        if (channel.isWritable()) {
            ChannelFuture lastWriteFuture = channel.write(e.getMessage().toString() + "\r\n");
        }
        close = true;


    // We do not need to write a ChannelBuffer here.
    // We know the encoder inserted at TelnetPipelineFactory will do the conversion.
    ChannelFuture future = e.getChannel().write(response + "\r\n");
    //CIERRA LA CONEXION
    if (close) {
        future.addListener(ChannelFutureListener.CLOSE);
    }
}

誰かが私を助けることができれば、私はとても感謝しています.

4

1 に答える 1

1

Netty Proxyの例を見てください

現在、基本的に、受信するすべてのメッセージでリモート サーバーに接続しようとしています。これはおそらくあなたが望むものではありません。リモート サーバーに 1 回だけ接続し (つまり、Netty プロキシの例では送信チャネル)、新しい受信メッセージをその特定のチャネルに転送したい場合があります。

于 2013-02-19T04:49:04.563 に答える