java nio SocketChannel 服务器端与多客户端 信息交互

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  private void handle(SelectionKey selectionKey) throws IOException{

  if (selectionKey.isConnectable()) {

  /*

  * 连接建立事件,已成功连接至服务器

  */

  client = (SocketChannel) selectionKey.channel();

  if (client.isConnectionPending()) {

  client.finishConnect();

  System.out.println(”connect success !”);

  sBuffer.clear();

  sBuffer.put((new Date()。toLocaleString()+” connected!”)。getBytes());

  sBuffer.flip();

  client.write(sBuffer);//发送信息至服务器

  /* 原文来自站长网

  * 启动线程一直监听客户端输入,有信心输入则发往服务器端

  * 因为输入流是阻塞的,所以单独线程监听

  */

  new Thread(){

  @Override

  public void run() {

  while(true){

  try {

  sBuffer.clear();

  InputStreamReader input = new InputStreamReader(System.in);

  BufferedReader br = new BufferedReader(input);

  sendText = br.readLine();

  /*

  * 未注册WRITE事件,因为大部分时间channel都是可以写的

  */

  sBuffer.put(sendText.getBytes());

  sBuffer.flip();

  client.write(sBuffer);

  } catch (IOException e) {

  e.printStackTrace();

  break;

  }

  }

  };

  }.start();

  }

  //注册读事件

  client.register(selector, SelectionKey.OP_READ);

  } else if (selectionKey.isReadable()) {

  /*

  * 读事件触发

  * 有从服务器端发送过来的信息,读取输出到屏幕上后,继续注册读事件

  * 监听服务器端发送信息

  */

  client = (SocketChannel) selectionKey.channel();

  rBuffer.clear();

  count=client.read(rBuffer);

  if(count>0){

  receiveText = new String( rBuffer.array(),0,count);

  System.out.println(receiveText);

  client = (SocketChannel) selectionKey.channel();

  client.register(selector, SelectionKey.OP_READ);

  }

  }

  }

[1][2][3]

没有人会帮你一辈子,所以你要奋斗一生。

java nio SocketChannel 服务器端与多客户端 信息交互

相关文章:

你感兴趣的文章:

标签云: