0

私はnettyを初めて使用し、nettyフレームワークを使用してチャットサーバーを実装しようとしています.クライアントはコマンドラインからサーバーにメッセージを送信します.サーバーは、キーボードから読み取ることによってメッセージを受信すると、それに応じて応答します.しかし、私のサーバーからの msg がクライアントに到達できません。チャット サーバーの netty フレームワークについて多くの調査を行いましたが、見つかったすべてのオープン ソース コードは基本的にエコー サーバーです。何が問題なのかよくわかりません。その部分を添付しました

clientHandler からのメッセージ受信:

 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws IOException   {
 System.out.println("Received message from server: " + e.getMessage());

 BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
 ChannelFuture lastWriteFuture = null;

 for(;;){
     String sentence;
     sentence = inFromUser.readLine();
     if (sentence.toLowerCase().equals("shutdown")) {
               channel.getCloseFuture().awaitUninterruptibly();
               break;
     }


     lastWriteFuture =channel.write(sentence+ "\r\n");


  }  
    //Wait until all messages are flushed before closing the channel.
 if (lastWriteFuture != null) {
 lastWriteFuture.awaitUninterruptibly();
    }

 channel.close().awaitUninterruptibly();


 }

serverHandler からのメッセージ受信:

        public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws IOException  {

System.out.println("Received message from client: " + e.getMessage());

String msgclient = (String) e.getMessage();
if (msgclient.toLowerCase().equals("bye")) {
    e.getChannel().close().awaitUninterruptibly();
    shutdown();
}

BufferedReader infromserver =new BufferedReader( new InputStreamReader(System.in));

String serversentence;
serversentence = infromserver.readLine();

System.out.println(serversentence);

Channel c=e.getChannel();       
ChannelFuture f =Channels.future(e.getChannel());


ChannelEvent responseEvent = new DownstreamMessageEvent(c, f, serversentence ,c.getRemoteAddress());
ctx.sendDownstream(responseEvent);

System.out.println(channels.size());        
System.out.println(responseEvent);

}

4

1 に答える 1

2

メッセージ受信ハンドラー内で無限ループ ( for(;;)) を作成しています。メッセージ受信ハンドラーから戻るまで、Netty は実際にはデータを送信しない (または受信データを使用してユーザーにコールバックする) ため、応答が返されません。

JBoss SecureChat クライアント ソース ( http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/securechat/SecureChatClient.html ) から例を取り上げたようです: 残りの部分を読んでください。http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/securechat/のソース ファイルを参照して、これを行う方法をよく理解してください。

于 2013-05-23T01:36:46.970 に答える