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)

相关推荐

  • 关于nodejs4

    技术关于nodejs4 关于nodejs4创建数据结构:
    1.下载安装Mongodb并配置环境变量
    2.新建文件
    3.在新文件中安装包
    4.输入:npm install mongoose执行命令

    礼包 2021年11月30日
  • oracle left join先后顺序(oracle rac)

    技术ORACLE 10G RAC如何启动与关闭小编给大家分享一下ORACLE 10G RAC如何启动与关闭,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了

    攻略 2021年12月18日
  • 怎么打出拼音声调,怎么打出汉语拼音声调符号

    技术怎么打出拼音声调,怎么打出汉语拼音声调符号打开WORD后怎么打出拼音声调,选择“插入→符号”,在符号→子集”选项里选择“进格的修饰字符”,里面就有汉语的声调符号.如图所示. 拼音声调
    拼音声调是指普通话中的声调,通

    生活 2021年10月21日
  • 让我看看英语,让我看看你的钢笔英语怎么说

    技术让我看看英语,让我看看你的钢笔英语怎么说给我看一下你的钢笔,翻译是show me your pen让我看看英语。关键词汇是动词show。 用了词组show sb sth意思是把某物展示给某人看。解释:show

    生活 2021年10月28日
  • JAVA8的stream怎么使用

    技术JAVA8的stream怎么使用这篇文章主要讲解了“JAVA8的stream怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA8的stream怎么使用”吧

    攻略 2021年11月30日
  • 拔苗助长的道理,拔苗助长告诉我们什么道理

    技术拔苗助长的道理,拔苗助长告诉我们什么道理拔苗助长的实例 /147264.html 还有无数的事实与活生生的实例,没有必要再写下去了拔苗助长的道理。要说那个家长不盼着自己的儿女出人头地,成龙成凤。但毕竟成龙成凤的是少数

    生活 2021年10月29日