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

河南网站建设首选公司网络推广发帖网站

河南网站建设首选公司,网络推广发帖网站,广告公司注册条件,wordpress 自适应如果你不想使用循环来监听客户端的连接和数据,你可以使用Java NIO(New I/O)的Selector类来实现非阻塞的Socket监听。Selector类提供了一种选择一组已经就绪的通道的机制,这样你就不需要使用循环来等待连接和数据。 以下是使用Sel…

如果你不想使用循环来监听客户端的连接和数据,你可以使用Java NIO(New 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;}Set<SelectionKey> selectedKeys = selector.selectedKeys();Iterator<SelectionKey> 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.fp688.cn/news/159819.html

相关文章:

  • 给一个公司做网站需要什么内容免费个人网页制作
  • wordpress小工具迁移优化大师会员兑换码
  • 广西南宁网站设计一站式推广平台
  • 广东省东莞seo技术
  • 培训机构优化网站优化排名金苹果下拉
  • 双滦网站建设关键词优化的价格查询
  • 建 网站 是软件开发洛阳seo网络推广
  • 北京市网站制作公司怎样做平台推广
  • 杭州网站商场开发保定百度首页优化
  • wordpress储存媒体插件seo推广任务小结
  • 网站和微信订阅号优势福州360手机端seo
  • 网站设计开发项目书网络营销策划步骤
  • html5 网站推荐哪里有网络推广
  • wp做图网站搜索广告是什么意思
  • 网站域名注册时间怎样做网络推广效果好
  • 怎么在网站做系统深圳网站建设专业乐云seo
  • 网站由那些组成长沙优化排名推广
  • 浙江网站建设方案优化百度贴吧人工客服电话
  • 做哪类视频网站需要视频牌照讯展网站优化推广
  • jsp做网站注册页面百度一下百度搜索网站
  • 做门户网站那个系统好微商引流推广
  • 网站建设规划怎么写爱站工具包官网下载
  • 个人网站做贷款广告国际新闻最新消息十条摘抄
  • 网站网站建设专业口碑优化seo
  • 前端做网站维护哪家培训机构好
  • 大学做网站是什么专业鸿星尔克网络营销案例分析
  • 如何清空网站数据库百度竞价价格查询
  • 北京网页设计广西seo搜索引擎优化
  • 批发网站建设seo营销方法
  • 购物商城网站百度账号注册