广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州​如何创建Java非阻塞套接字通道回显服务器程序?_北大青鸟IT学校

作者:邓华发布时间:2021-05-13分类:Java技术浏览:708


导读:​如何创建Java非阻塞套接字通道回显服务器程序?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

如何创建Java非阻塞套接字通道回显服务器程序?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

实例

以下代码显示如何创建Java非阻塞套接字通道回显服务器程序。

import java.net.InetAddress;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.Iterator;import java.util.Set;public class Main {  public static void main(String[] args) throws Exception {
   InetAddress hostIPAddress = InetAddress.getByName("localhost");    int port = 19000;
   Selector selector = Selector.open();
   ServerSocketChannel ssChannel = ServerSocketChannel.open();
   ssChannel.configureBlocking(false);
   ssChannel.socket().bind(new InetSocketAddress(hostIPAddress, port));
   ssChannel.register(selector, SelectionKey.OP_ACCEPT);    while (true) {      if (selector.select() <= 0) {        continue;
     }
     processReadySet(selector.selectedKeys());
   }
 }  public static void processReadySet(Set readySet) throws Exception {
   Iterator iterator = readySet.iterator();    while (iterator.hasNext()) {
     SelectionKey key = (SelectionKey) iterator.next();
     iterator.remove();      if (key.isAcceptable()) {
       ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel();
       SocketChannel sChannel = (SocketChannel) ssChannel.accept();
       sChannel.configureBlocking(false);
       sChannel.register(key.selector(), SelectionKey.OP_READ);
     }      if (key.isReadable()) {
       String msg = processRead(key);        if (msg.length() > 0) {
         SocketChannel sChannel = (SocketChannel) key.channel();
         ByteBuffer buffer = ByteBuffer.wrap(msg.getBytes());
         sChannel.write(buffer);
       }
     }
   }
 }  public static String processRead(SelectionKey key) throws Exception {
   SocketChannel sChannel = (SocketChannel) key.channel();
   ByteBuffer buffer = ByteBuffer.allocate(1024);    int bytesCount = sChannel.read(buffer);    if (bytesCount > 0) {
     buffer.flip();      return new String(buffer.array());
   }    return "NoMessage";
 }
}

想了解更多关于Java的资讯吗?可以来惠州北大青鸟新方舟校区了解一下。

java5.png

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表