Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在netty框架中将响应从服务器发送回客户端_Netty - Fatal编程技术网

如何在netty框架中将响应从服务器发送回客户端

如何在netty框架中将响应从服务器发送回客户端,netty,Netty,我是netty的新手,我尝试使用netty框架实现聊天服务器。客户端将从命令行向服务器发送消息。当从键盘读入消息时,服务器将做出相应响应。但是,我从服务器发送的消息无法到达客户端。我对聊天服务器netty框架做了大量研究,我能找到的所有开放源代码基本上都是echo服务器。我不太确定是什么问题。我附上了该部分 从clientHandler收到的消息: public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)thr

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

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

}

您正在消息接收处理程序内部为(;;)创建无限循环(
):您不会收到任何响应,因为在您从消息接收处理程序返回之前,Netty不会实际发送任何数据(或使用任何接收到的数据给您回电话)

看起来您的示例来自JBoss SecureChat客户端源代码():请阅读上的其他源文件,以便更好地掌握如何执行此操作