当前位置: 首页 > news >正文

南充市建设厅官方网站深圳造价信息网官网

南充市建设厅官方网站,深圳造价信息网官网,吉林省软环境建设办公室网站,计算机网络工程师证书如果你不想使用循环来监听客户端的连接和数据#xff0c;你可以使用Java NIO#xff08;New I/O#xff09;的Selector类来实现非阻塞的Socket监听。Selector类提供了一种选择一组已经就绪的通道的机制#xff0c;这样你就不需要使用循环来等待连接和数据。 以下是使用Sel…如果你不想使用循环来监听客户端的连接和数据你可以使用Java NIONew I/O的Selector类来实现非阻塞的Socket监听。Selector类提供了一种选择一组已经就绪的通道的机制这样你就不需要使用循环来等待连接和数据。 以下是使用Selector类的示例代码 private ServerSocketChannel serverSocketChannel; private Selector selector;private void startServer() throws IOException {serverSocketChannel ServerSocketChannel.open();serverSocketChannel.configureBlocking(false);serverSocketChannel.socket().bind(new InetSocketAddress(8888));selector Selector.open();serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);while (true) {int readyChannels selector.select();if (readyChannels 0) {continue;}SetSelectionKey selectedKeys selector.selectedKeys();IteratorSelectionKey keyIterator selectedKeys.iterator();while (keyIterator.hasNext()) {SelectionKey key keyIterator.next();if (key.isAcceptable()) {handleAcceptableKey(key);} else if (key.isReadable()) {handleReadableKey(key);}keyIterator.remove();}} }private void handleAcceptableKey(SelectionKey key) throws IOException {ServerSocketChannel serverChannel (ServerSocketChannel) key.channel();SocketChannel clientChannel serverChannel.accept();clientChannel.configureBlocking(false);clientChannel.register(selector, SelectionKey.OP_READ);Log.d(Server, 设备已连接); }private void handleReadableKey(SelectionKey key) throws IOException {SocketChannel channel (SocketChannel) key.channel();ByteBuffer buffer ByteBuffer.allocate(1024);int bytesRead channel.read(buffer);if (bytesRead -1) {channel.close();Log.d(Server, 设备已断开连接);return;}buffer.flip();byte[] data new byte[buffer.limit()];buffer.get(data);String receivedData new String(data);Log.d(Server, 接收到数据 receivedData);// 处理接收到的数据// 回复客户端ByteBuffer responseBuffer ByteBuffer.wrap((已接收到数据 receivedData).getBytes());channel.write(responseBuffer); } 在上面的代码中我们首先创建一个ServerSocketChannel对象并将其配置为非阻塞模式。然后我们将ServerSocketChannel绑定到指定的端口并将其注册到Selector中以便监听客户端连接。 在while循环中我们使用selector.select()方法来选择已经就绪的通道。如果没有就绪的通道我们可以继续等待。一旦有通道就绪我们使用selector.selectedKeys()方法获取已选择的键集合并使用迭代器遍历这些键。 在迭代器循环中我们根据键的类型判断通道是否可接受连接或可读取数据。如果是可接受连接的通道我们使用handleAcceptableKey()方法处理。如果是可读取数据的通道我们使用handleReadableKey()方法处理。 在handleAcceptableKey()方法中我们使用serverChannel.accept()方法来接受客户端连接并将客户端通道注册到Selector中以便监听客户端发送的数据。 在handleReadableKey()方法中我们首先读取客户端发送的数据并将其存储在ByteBuffer中。如果读取到的字节数为-1表示客户端断开连接我们关闭通道并在日志中打印出设备已断开连接。如果读取到有效的数据我们可以在代码中处理这些数据并通过通道向客户端发送回复。 请注意这只是一个使用Selector的简单示例代码。你需要根据你的实际需求进行适当的修改和优化。 希望这可以解决你的问题
http://www.hkea.cn/news/14572133/

相关文章:

  • 公司门户网站制作需要多少钱把网站做二维码
  • 如何给WordPress网站更换域名郑州中森网站建设
  • 地方网站 源码网络技术培训总结
  • 做mla的网站建设网站要服务器
  • dede添加网站背景郑州网站建设时一定需要注意的六点
  • 高端购物网站创建自己的免费网站
  • 想当淘客自己的网站怎么做网站建设套定额
  • 东阳网站建设哪家好潍坊电商网站建设
  • 单品商城网站源码wordpress预约订单插件
  • 开发公司网站建设如何进行网站优化设计
  • 自己怎么建立网站网站文字列表页模板
  • 杂志社网站模板中铁建设集团有限公司门户网站
  • 门户网站软文网站建设的教学设计
  • 第三方网站流量统计抖音代运营话术
  • 论坛型网站开发门户类型网站有哪些
  • 建设银行网站信任河南建设厅网站地址
  • iis5.1 建立网站太原百度seo排名软件
  • 网站收录不好排名高网站点击换图片的效果怎么做
  • 建设网站如何索要素材互联网公司排名全球
  • 用dw制作网站模板下载wordpress 查看文章id
  • 论文网站建设格式thinkphp网站建设
  • 网站开发需要哪些资料网叶制作
  • seo型网站建筑人才网站哪个比较好
  • 网站建设公司怎么做业务十大免费excel网站
  • 西安网站seo技术写一个小程序大概要多少钱
  • 咸阳免费做网站公司机械设计软件solidworks
  • 杭州公司网站建设青岛手机建站公司
  • 网站开发毕设开题报告怎么写深圳住房和建设局网站网上预约
  • 珠海自适应网站建设推拿网站制作
  • 深圳罗湖网站设计wordpress 帝国cms速度