Java基于NIO怎么实现聊天室功能

技术Java基于NIO怎么实现聊天室功能Java基于NIO怎么实现聊天室功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Sever端package com

爪哇基于尼奥怎么实现聊天室功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Sever端

打包。qst。一个;

导入Java。io。ioexception

导入Java。净。inetsocketaddress

导入Java。净。SocketAddress

导入Java。尼奥。频道。渠道;

导入Java。尼奥。频道。可选频道;

导入Java。尼奥。频道。选择键;

导入Java。尼奥。频道。选择器;

导入Java。尼奥。频道。服务器套接字通道;

导入Java。尼奥。频道。Socketchannel

导入Java。乌提尔。迭代器;

导入Java。乌提尔。设置;

导入Java。尼奥。Bytebuffer

publicclassServer{

privatedstatsocketchannelacept;

publicationstativitmain(String[]args){ 0

System.out.println(' -服务端启动- ');

尝试{

//获取通道

serversontchannelchannel=serversontchannel。open();

//配置非阻塞模式

频道。configure blocking(false);

//绑定连接的端口

频道。bind(新inetsocketaddress(9999));

//获取选择器

选择器选择器。open();

//注册通道到选择器上,开始监听事件

channel.register(选择器,选择键. OP _ ACCEPT);

//使用选择器进行轮询

而(选择器。选择(){ 0 }

//获取到选择器上所有注册的通道中已经就绪好的事件

迭代器选择键迭代器=选择器。迭代器();

while(迭代器。HasNeXt()){ 0

//获取事件

SelectionKeynext=迭代器。next();

//判断事件类型

if(下一个。isaacceptable()){ 0

//获取通道

accept=通道。accept();

/

/ 获取当前连接分配地址
      SocketAddress address = accept.getLocalAddress();
      System.out.println(address + "上线了");
      // 切换模式
      accept.configureBlocking(false);
      // 将通道注册到选择器上
      accept.register(selector, SelectionKey.OP_READ);
     }
     // 如果为读模式
     else if (next.isReadable()) {
      SocketChannel accept = (SocketChannel) next.channel();
      // 读取事件
      ByteBuffer buffer = ByteBuffer.allocate(1024);
      int len;
      while ((len = accept.read(buffer)) > 0) {
       // 开启读模式
       buffer.flip();
       //      System.out.println((char)len);
       System.out.println(new String(buffer.array(), 0, len));
       // 归位
       buffer.clear();
      }
     }
     iterator.remove();
    }
   } 
  } catch (Exception e) {
   try {
    SocketAddress address = accept.getRemoteAddress();
    System.out.println(address+"离线了");
   } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
   
  }
  
 }
}

Client端

package com.qst.one;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.channels.SocketChannel;
import java.util.Scanner;
import java.nio.ByteBuffer;
public class Client {
 
 
 public static void main(String[] args) throws IOException {
  SocketChannel channel = SocketChannel.open(new InetSocketAddress("localhost", 9999));
  
  
  channel.configureBlocking(false);
  
  ByteBuffer buffer = ByteBuffer.allocate(1024);
  Scanner sc = new Scanner(System.in);
  SocketAddress address = channel.getLocalAddress();
  System.out.println(address+"ready~~~");
  
  while(true) {
   System.out.print("tim:");
   String name = sc.nextLine();
   
   buffer.put(("tim :"+name).getBytes());
   buffer.flip();
   channel.write(buffer);
   buffer.clear();
   
  }
  
  
 }
}

Java基于NIO怎么实现聊天室功能

看完上述内容,你们掌握Java基于NIO怎么实现聊天室功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/115592.html

(0)

相关推荐

  • Java嵌入脚本怎么快速解析多层 json

    技术Java嵌入脚本怎么快速解析多层 jsonJava嵌入脚本怎么快速解析多层 json,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。关于Json处理的开源

    攻略 2021年12月2日
  • myeclipse+git push报错是怎么回事

    技术myeclipse+git push报错是怎么回事这篇文章给大家分享的是有关myeclipse+git push报错是怎么回事的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原因:本地和远程

    攻略 2021年11月27日
  • 过滤器和拦截器的区别有哪些

    技术过滤器和拦截器的区别有哪些这篇文章主要讲解了“过滤器和拦截器的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“过滤器和拦截器的区别有哪些”吧!Filter的使

    攻略 2021年10月28日
  • Linq-Include

    技术Linq-Include Linq-IncludeLINQ中的Include()有什么作用我尝试进行了大量研究,但我更像是数据库专家-因此,即使MSDN中的解释对我也没有任何意义.有人可以解释一下,

    礼包 2021年12月3日
  • Java学习之Java面试题

    技术Java学习之Java面试题 Java学习之Java面试题千锋重庆Java的小编为大家整理了部分中级Java软件开发面试题以供大家参考:1.谈谈对面向对象的理解;以及三大特征;
    面向对象是基于万物皆

    礼包 2021年11月29日
  • wcf服务接口定义的前面需要注解啥(wcf序列化是在客户端还是服务端)

    技术WCF服务元数据结构模式是怎样的这篇文章主要介绍“WCF服务元数据结构模式是怎样的”,在日常操作中,相信很多人在WCF服务元数据结构模式是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月14日