【问题标题】:How to send back a response from server to client in netty framework如何在netty框架中将响应从服务器发送回客户端
【发布时间】:2013-05-23 09:36:46
【问题描述】:

我是 netty 的新手,我尝试使用 netty 框架实现聊天服务器。客户端将从命令行向服务器发送一条消息。当通过从键盘读取接收到一条消息时,服务器将做出相应的响应。但是,我的服务器消息无法到达客户端。我对聊天服务器 netty 框架进行了大量研究,我能找到的所有开源代码基本上都是回显服务器。我不太确定是什么问题。我附上了部分

从客户端处理程序接收到的消息:

 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);

}

【问题讨论】:

    标签: netty


    【解决方案1】:

    您正在消息接收处理程序中创建无限循环 (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/ 上的其余源文件,以很好地掌握如何执行此操作。

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 2012-02-21
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多