Mina框架,服务器端通过键盘录入向客户端发送消息,不能发送,原因?

当空皓月 发布于 2014/06/25 09:39
阅读 648
收藏 0

Mina框架,服务器端通过键盘录入向客户端发送消息,不能发送,原因?

服务器端代码:public class MinaServer {
 private static int PORT = 3005;
 public static void main(String[] args) {
  IoAcceptor acceptor = null;   // 创建连接
  try {
   // 创建一个非阻塞的server端的Socket
   acceptor = new NioSocketAcceptor();
   // 设置过滤器(使用Mina提供的文本换行符编解码器)
   acceptor.getFilterChain().addLast( //添加消息过滤器
     "codec",
     new ProtocolCodecFilter(new TextLineCodecFactory(Charset
       .forName("UTF-8"),
       LineDelimiter.WINDOWS.getValue(),
       LineDelimiter.WINDOWS.getValue())));
   // 设置读取数据的缓冲区大小
   acceptor.getSessionConfig().setReadBufferSize(2048);
   // 读写通道10秒内无操作进入空闲状态
   acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 20);
   // 绑定逻辑处理器
   acceptor.setHandler(new MinaServerHandler()); // 添加业务处理
   // 绑定端口
   acceptor.bind(new InetSocketAddress(PORT));
   System.out.println("服务端启动  开始监听端口:" + PORT);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

MinaServerHandler类:public class MinaServerHandler extends IoHandlerAdapter {
 private Scanner scannerIn;
 // 当客户端发送的消息到达时:
 @Override
 public void messageReceived(IoSession session, Object message)
   throws Exception {
  System.out.println("客户端"+session.getRemoteAddress()+"说:" + message);
  if ("bye".equals(message)) { // 服务端断开连接的条件
   session.close();
  }
  //write the received data back to remote peer
  /*Date date = new Date();
  session.write("服务器:"+date);*/
  
  scannerIn = new Scanner(System.in);  客户端发送完一次消息后,再次发送时在这里会狂等,服务器端不能再收到消息,也不能回复消息,不知道为什么?    
   while (scannerIn.hasNext()) {
   session.write(scannerIn.next());// 发送键盘录入消息
  }

}

加载中
0
渠富林
渠富林
scannerIn = new Scanner(System.in);  客户端发送完一次消息后,再次发送时在这里会狂等,服务器端不能再收到消息,也不能回复消息,不知道为什么?    
   while (scannerIn.hasNext()) {
   session.write(scannerIn.next());// 发送键盘录入消息

  }

把这部分代码放到一个线程里,这部分代码会阻塞mina的线程

渠富林
渠富林
客户端的handler里有收消息的代码吗?
当空皓月
当空皓月
按照你说的,我开启了一个线程,解决了客户端再次发送消息服务器端也能收到的问题,但是,服务器端无法回复消息给给客户端
0
当空皓月
当空皓月

客户端发送键盘录入的一段代码:

connector.setHandler(new MinaClient1Handler());// 添加业务处理
  IoSession session = null;
  try {
   ConnectFuture future = connector.connect(new InetSocketAddress(
     HOST, PORT));// 创建连接
   future.awaitUninterruptibly();// 等待连接创建完成
   session = future.getSession();// 获得session
    scannerIn = new Scanner(System.in);
   while (scannerIn.hasNext()) {
    String readLine = scannerIn.next(); 
    session.write(readLine);// 发送消息
   }
   
  } catch (Exception e) {
   System.out.println("客户端链接异常..." + e);
  }
  finally
  {
   scannerIn.close();
  }

 

返回顶部
顶部