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)

相关推荐

  • C++缺省参数怎么理解

    技术C++缺省参数怎么理解本篇内容主要讲解“C++缺省参数怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++缺省参数怎么理解”吧!什么叫缺省参数?缺省参数是声明或定

    攻略 2021年12月3日
  • JavaScript如何实现标签页切换效果

    技术JavaScript如何实现标签页切换效果小编给大家分享一下JavaScript如何实现标签页切换效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了

    攻略 2021年10月31日
  • 春联由来,春联的习俗是如何流传开的

    技术春联由来,春联的习俗是如何流传开的春联二三事实在没有想到春联由来,我家的春联成了他人过目不忘的风景!前年,因为东面邻家华栋殿宇欣喜落成,我家的围墙、地皮被拉裂扯破,主房也受到了一些损伤,被迫重砌围墙、装修房屋,我们的

    生活 2021年10月23日
  • html5璁剧疆椤甸潰瀹藉害(html5中元素能不能拉伸宽度)

    技术html5中元素能不能拉伸宽度这篇文章给大家分享的是有关html5中元素能不能拉伸宽度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 html中元素能拉伸宽度,

    攻略 2021年12月25日
  • 街道用英语怎么说,街道上有很多商店,用英语怎么说

    技术街道用英语怎么说,街道上有很多商店,用英语怎么说There are many stores on the street.There are some stores on the street.
    There are a

    生活 2021年10月22日
  • javascript中Promise原理是什么

    技术javascript中Promise原理是什么本篇内容主要讲解“javascript中Promise原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascr

    攻略 2021年11月15日