广告
返回顶部
首页 > 资讯 > 精选 >Java NIO怎么实现聊天室程序
  • 757
分享到

Java NIO怎么实现聊天室程序

2023-06-17 11:06:54 757人浏览 独家记忆
摘要

本文小编为大家详细介绍“Java NIO怎么实现聊天室程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java Nio怎么实现聊天室程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。服务端:package&n

本文小编为大家详细介绍“Java NIO怎么实现聊天室程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java Nio怎么实现聊天室程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

服务端:

package test.javanio;    import java.io.IOException;  import java.net.InetSocketAddress;  import java.nio.ByteBuffer;  import java.nio.channels.SelectionKey;  import java.nio.channels.Selector;  import java.nio.channels.ServerSocketChannel;  import java.nio.channels.SocketChannel;  import java.util.Date;  import java.util.Iterator;  import java.util.logging.Level;  import java.util.logging.Logger;   public class MySocketServer implements Runnable {       private boolean running;       private Selector selector;      String writeMsg;      StringBuffer sb = new StringBuffer();      SelectionKey ssckey;       public MySocketServer() {           running = true;       }       public void init() {          try {              selector = Selector.open();              ServerSocketChannel ssc = ServerSocketChannel.open();              ssc.configureBlocking(false);              ssc.socket().bind(new InetSocketAddress(2345));              ssckey = ssc.reGISter(selector, SelectionKey.OP_ACCEPT);              System.out.println("server is starting..." + new Date());          } catch (IOException ex) {              Logger.getLogger(MySocketServer.class.getName()).log(Level.SEVERE,                      null, ex);          }      }       public static void main(String[] args) {          MySocketServer server = new MySocketServer();          new Thread(server).start();       }       public void execute() {          try {              while (running) {                  int num = selector.select();                  if (num > 0) {                      Iterator<SelectionKey> it = selector.selectedKeys()                              .iterator();                      while (it.hasNext()) {                          SelectionKey key = it.next();                          it.remove();                          if (!key.isValid())                              continue;                          if (key.isAcceptable()) {                              System.out.println("isAcceptable");                              getConn(key);                          } else if (key.isReadable()) {                              System.out.println("isReadable");                              readMsg(key);                          }                           else if (key.isValid() && key.isWritable()) {                              if (writeMsg != null) {                                  System.out.println("isWritable");                                  writeMsg(key);                              }                           }                           else                             break;                       }                   }                  Thread.yield();              }           } catch (IOException ex) {              Logger.getLogger(MySocketServer.class.getName()).log(Level.SEVERE,                      null, ex);          }      }       private void getConn(SelectionKey key) throws IOException {          ServerSocketChannel ssc = (ServerSocketChannel) key.channel();          SocketChannel sc = ssc.accept();          sc.configureBlocking(false);          sc.register(selector, SelectionKey.OP_READ);          System.out.println("build connection :"                 + sc.socket().getRemoteSocketAddress());      }       private void readMsg(SelectionKey key) throws IOException {          sb.delete(0, sb.length());          SocketChannel sc = (SocketChannel) key.channel();          System.out.print(sc.socket().getRemoteSocketAddress() + " ");          ByteBuffer buffer = ByteBuffer.allocate(1024);          buffer.clear();          int len = 0;          StringBuffer sb = new StringBuffer();          while ((len = sc.read(buffer)) > 0) {              buffer.flip();              sb.append(new String(buffer.array(), 0, len));          }          if (sb.length() > 0)              System.out.println("get from client:" + sb.toString());          if (sb.toString().trim().toLowerCase().equals("quit")) {              sc.write(ByteBuffer.wrap("BYE".getBytes()));              System.out.println("client is closed "                     + sc.socket().getRemoteSocketAddress());              key.cancel();              sc.close();              sc.socket().close();           } else {              String toMsg = sc.socket().getRemoteSocketAddress() + "said:"                     + sb.toString();              System.out.println(toMsg);               writeMsg = toMsg;                                          Iterator<SelectionKey> it = key.selector().keys().iterator();               while (it.hasNext()) {                  SelectionKey skey = it.next();                  if (skey != key && skey != ssckey) {                      if (skey.attachment() != null) {                          String str = (String) skey.attachment();                          skey.attach(str + toMsg);                      } else {                          skey.attach(toMsg);                      }                      skey                              .interestOps(skey.interestOps()                                      | SelectionKey.OP_WRITE);                  }               }              selector.wakeup();// 可有可无           }       }       public void run() {          init();          execute();      }       private void writeMsg(SelectionKey key) throws IOException {           System.out.println("++++enter write+++");          SocketChannel sc = (SocketChannel) key.channel();          String str = (String) key.attachment();           sc.write(ByteBuffer.wrap(str.getBytes()));          key.interestOps(SelectionKey.OP_READ);      }  }

客户端:

package test.javanio;    import java.io.BufferedReader;  import java.io.IOException;  import java.io.InputStreamReader;  import java.net.InetSocketAddress;  import java.nio.ByteBuffer;  import java.nio.channels.Selector;  import java.nio.channels.SocketChannel;  import java.util.logging.Level;  import java.util.logging.Logger;  import java.util.Currency.*;   public class MySocketClient implements Runnable {      Selector selector;       boolean running;       SocketChannel sc;       public MySocketClient() {          running = true;       }       public void init() {          try {              sc = SocketChannel.open();              sc.configureBlocking(false);              sc.connect(new InetSocketAddress("localhost", 2345));           } catch (IOException ex) {              Logger.getLogger(MySocketClient.class.getName()).log(Level.SEVERE,                      null, ex);          }      }       public static void main(String[] args) {           MySocketClient client = new MySocketClient();          new Thread(client).start();      }       public void execute() {           int num = 0;          try {              while (!sc.finishConnect()) {              }          } catch (IOException ex) {              Logger.getLogger(MySocketClient.class.getName()).log(Level.SEVERE,                      null, ex);          }           ReadKeyBoard rkb = new ReadKeyBoard();          new Thread(rkb).start();          while (running) {              try {                   ByteBuffer buffer = ByteBuffer.allocate(1024);                  buffer.clear();                   StringBuffer sb = new StringBuffer();                  Thread.sleep(500);                   while ((num = sc.read(buffer)) > 0) {                      sb.append(new String(buffer.array(), 0, num));                      buffer.clear();                  }                  if (sb.length() > 0)                      System.out.println(sb.toString());                  if (sb.toString().toLowerCase().trim().equals("bye")) {                      System.out.println("closed....");                       sc.close();                      sc.socket().close();                      rkb.close();                      running = false;                  }              } catch (InterruptedException ex) {                  Logger.getLogger(MySocketClient.class.getName()).log(                          Level.SEVERE, null, ex);              } catch (IOException ex) {                  Logger.getLogger(MySocketClient.class.getName()).log(                          Level.SEVERE, null, ex);              }          }       }       public void run() {          init();          execute();      }       class ReadKeyBoard implements Runnable {           boolean running2 = true;           public ReadKeyBoard() {           }           public void close() {              running2 = false;          }           public void run() {              BufferedReader reader = new BufferedReader(new InputStreamReader(                      System.in));              while (running2) {                  try {                      System.out.println("enter some commands:");                      String str = reader.readLine();                      sc.write(ByteBuffer.wrap(str.getBytes()));                   } catch (IOException ex) {                      Logger.getLogger(ReadKeyBoard.class.getName()).log(                              Level.SEVERE, null, ex);                  }              }           }       }  }

读到这里,这篇“Java NIO怎么实现聊天室程序”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Java NIO怎么实现聊天室程序

本文链接: https://www.lsjlt.com/news/288788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java NIO怎么实现聊天室程序
    本文小编为大家详细介绍“Java NIO怎么实现聊天室程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java NIO怎么实现聊天室程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。服务端:package&n...
    99+
    2023-06-17
  • Java怎么实现NIO聊天室
    这篇文章给大家分享的是有关Java怎么实现NIO聊天室的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。功能介绍功能:群聊+私发+上线提醒+下线提醒+查询在线用户文件Utils需要用maven导入下面两个包 ...
    99+
    2023-06-15
  • Java NIO怎么实现聊天室功能
    这篇文章主要介绍了Java NIO怎么实现聊天室功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下代码里面已经包含了必要的注释,这里不详述了。实现了基本...
    99+
    2023-06-21
  • Java NIO实现聊天室功能
    本文实例为大家分享了Java NIO实现聊天室功能的具体代码,供大家参考,具体内容如下 代码里面已经包含了必要的注释,这里不详述了。实现了基本的聊天室功能。 常量类: publi...
    99+
    2022-11-12
  • Java NIO实现多人聊天室
    本文实例为大家分享了Java NIO实现多人聊天室的具体代码,供大家参考,具体内容如下 1. 服务器端代码 ChatServer类: package nio.test.serve...
    99+
    2022-11-12
  • Java基于NIO怎么实现聊天室功能
    Java基于NIO怎么实现聊天室功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Sever端package com.qst.one;import java...
    99+
    2023-06-21
  • 怎么使用Java NIO实现多人聊天室
    本篇内容主要讲解“怎么使用Java NIO实现多人聊天室”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java NIO实现多人聊天室”吧!NIO服务端public&n...
    99+
    2023-06-21
  • Java基于NIO实现聊天室功能
    本文实例为大家分享了Java基于NIO实现聊天室功能的具体代码,供大家参考,具体内容如下 Sever端 package com.qst.one; import java.io....
    99+
    2022-11-12
  • java NIO怎么实现简单聊天程序
    这篇文章主要为大家展示了“java NIO怎么实现简单聊天程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java NIO怎么实现简单聊天程序”这篇文章吧。具体内容如下服务...
    99+
    2023-06-21
  • Java NIO实战之多人聊天室
    本文实例为大家分享了Java NIO实战之多人聊天室的具体代码,供大家参考,具体内容如下 NIO服务端 public class NioServer { pu...
    99+
    2022-11-12
  • java NIO实现简单聊天程序
    本文实例为大家分享了java NIO实现简单聊天程序的具体代码,供大家参考,具体内容如下 服务端 功能: 1、接受客户端连接 2、发送消息 3、读取客户端消息 Server.jav...
    99+
    2022-11-12
  • Java实现NIO聊天室的示例代码(群聊+私聊)
    目录功能介绍文件UtilsFinalValueMessageNioServerNioClient功能介绍 功能:群聊+私发+上线提醒+下线提醒+查询在线用户 文件 U...
    99+
    2022-11-12
  • Java实现单线程聊天室
    本文实例为大家分享了Java实现单线程聊天室的具体代码,供大家参考,具体内容如下 一. Socket API简介 1. Socket编程 Java.net.Socket类代表一个套接...
    99+
    2022-11-13
  • Java实现多线程聊天室
    本文实例为大家分享了Java实现多线程聊天室的具体代码,供大家参考,具体内容如下 之前呢已经用单线程的方式来实现了聊天室,但其实它的功能并不齐全,下面用多线程来实现,功能会比单线程聊...
    99+
    2022-11-12
  • Java聊天室之实现聊天室服务端功能
    目录一、题目描述二、解题思路三、代码详解多学一个知识点一、题目描述 题目实现:实现聊天室服务器端功能。运行程序,服务端等待客户端连接,并显示客户端的连接信息。 二、解题思路 创建一个...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 服务端
  • Java聊天室之实现聊天室客户端功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:实现聊天室客户端。运行程序,用户登录服务器后,可以从用户列表中选择单个用户进行聊天,也可以选择多个用户进行聊天。 二、...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 客户端
  • 如何实现linux聊天室程序
    这篇文章主要讲解了“如何实现linux聊天室程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现linux聊天室程序”吧!代码一:#ifndef&nb...
    99+
    2022-10-19
  • Java实现聊天室界面
    本文实例为大家分享了Java实现聊天室界面的具体代码,供大家参考,具体内容如下 服务器端: package Server;   import java.awt.Toolkit; im...
    99+
    2022-11-13
  • Java NIO实现聊天功能
    本文实例为大家分享了Java NIO实现聊天功能的具体代码,供大家参考,具体内容如下 server code :  package com.tch.test.nio; imp...
    99+
    2022-11-12
  • Java NIO实现聊天系统
    使用Java的NIO写的一个小的聊天系统,供大家参考,具体内容如下 一、服务端 public class GroupChatServer { // 定义相关的属性 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作