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)

相关推荐

  • 华为手机什么型号好,现在华为哪款手机值得购买

    技术华为手机什么型号好,现在华为哪款手机值得购买华为手机比较好的型号当然推荐华为mate 系列和P系列了华为手机什么型号好。华为手机现在型号系列不断拓展,型号分布也十分丰富了,最为顶尖的华为手机型号先推荐华为mate 系

    生活 2021年10月28日
  • nodejs是一门语言吗

    技术nodejs是一门语言吗这篇文章主要讲解了“nodejs是一门语言吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs是一门语言吗”吧!

    攻略 2021年11月19日
  • Redis如何安装及配置

    技术Redis如何安装及配置小编给大家分享一下Redis如何安装及配置,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!安装Redis安装非常方便

    攻略 2021年11月15日
  • 如何实现element穿梭框性能优化

    技术如何实现element穿梭框性能优化这篇文章主要讲解了“如何实现element穿梭框性能优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现element穿梭框

    攻略 2021年10月26日
  • 如何检查nodejs是否安装成功

    技术如何检查nodejs是否安装成功这篇文章主要为大家展示了“如何检查nodejs是否安装成功”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何检查nodejs是否安装成功”

    攻略 2021年11月7日
  • snow形容词,车上snow是什么意思

    技术snow形容词,车上snow是什么意思一,SNOW是雪地模式的意思。二,snow是雪地模式在仪表盘上的显示。1,snow,在变速器旁边一般会有个SNOW按键,按下SNOW按键后,汽车以雪地模式行驶,适合积雪或湿滑地面

    生活 2021年10月23日