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)

相关推荐

  • 日本服务器租用适合端口转发的理由

    技术日本服务器租用适合端口转发的理由最近不少客户都来咨询用于端口转发服务比较适合的服务器,一般情况下我们都是推荐日本服务器或者香港服务器作为端口转发使用,下面就来简单介绍一下理由端口转发的用途是什么?
    端口转发对于IT专

    礼包 2021年12月8日
  • Atomikos + druid 多数据源数据库连接超时回收问题怎么解决

    技术Atomikos + druid 多数据源数据库连接超时回收问题怎么解决Atomikos + druid 多数据源数据库连接超时回收问题怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细

    攻略 2021年12月1日
  • 黄骨鱼的做法,怎样才能做出好吃又营养的黄骨鱼

    技术黄骨鱼的做法,怎样才能做出好吃又营养的黄骨鱼食材:鲜活黄骨鱼(一般一餐一个人可以吃两至四条黄骨鱼的做法,最好购买新鲜的,可以自己拿回家处理,也可让卖家代劳) 配料:姜、葱、蒜、植物油、盐、味精、酱油、豆瓣酱、红剁椒(

    生活 2021年10月27日
  • kafka新版常用命令有哪些

    技术kafka新版常用命令有哪些这篇文章将为大家详细讲解有关kafka新版常用命令有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1/列出topic的命令为:kafka-topic

    攻略 2021年11月21日
  • 汇编语言怎么实现各种码制的转换

    技术汇编语言怎么实现各种码制的转换本篇内容主要讲解“汇编语言怎么实现各种码制的转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言怎么实现各种码制的转换”吧!1.十六进

    攻略 2021年11月29日
  • 软件测试app问题之闪退

    技术软件测试app问题之闪退 软件测试___app问题之闪退闪退的原因分为种:一、软件本身有问题;二、系统出现问题。
    一、软件问题
    (1)app 不兼容系统当前系统版本
    (2)app有了新版本,没有跟新

    礼包 2021年11月24日