PC上浏览器是如何查询DNS 缓存的呢?

通过 ipconfig /displaydns 的显示结果可以获取本机的 DNS 缓存信息,那么浏览器是如何获取本机的 DNS 缓存。

答案是:浏览器获取本机的 DNS 缓存主要是通过操作系统提供的接口来获取,。

具体的获取途径如下:

  1. 先查询自身缓存:浏览器会首先检查自己内部维护的 DNS 缓存。当用户访问一个网站时,浏览器会将域名对应的 IP 地址缓存下来,以便下次访问时快速获取。不同的浏览器对 DNS 缓存的存储时间和策略可能会有所不同,但一般来说,浏览器会在一定时间内保留 DNS 缓存以提高访问速度。例如,谷歌浏览器的 DNS 缓存时间相对较短。
  2. 若浏览器缓存未命中,查询操作系统缓存:如果浏览器自身的缓存中没有找到对应的 DNS 记录,它会向操作系统发出请求,获取操作系统级别的 DNS 缓存。操作系统会维护一个 DNS 缓存,其中存储了最近访问过的域名及其对应的 IP 地址。在 Windows 系统中,可以使用 ipconfig /displaydns 命令查看操作系统的 DNS 缓存,但这只是一种查看方式,浏览器是通过操作系统提供的相关系统调用接口来获取这些缓存信息的。
  3. 读取本地 hosts 文件(若操作系统缓存未命中):如果操作系统的 DNS 缓存中也没有找到所需的 DNS 记录,浏览器会检查本地的 hosts 文件。hosts 文件是一个本地的文本文件,可以手动添加域名和 IP 地址的映射关系。浏览器会按照 hosts 文件中的配置来解析域名,如果找到对应的映射关系,就会使用文件中指定的 IP 地址。
  4. 向 DNS 服务器发起请求(若前面途径都未获取到):如果在前面的步骤中都没有找到对应的 DNS 记录,浏览器会向配置的 DNS 服务器发起请求,获取域名对应的 IP 地址。DNS 服务器会根据域名的层级结构,从根域名服务器开始递归查询,直到找到负责该域名的权威域名服务器。

浏览器获取本机的 DNS 缓存主要是通过操作系统提供的以下几种常见接口来获取:

  1. 系统调用接口:操作系统会提供一系列的系统调用函数,浏览器通过调用这些函数来访问操作系统级别的 DNS 缓存。不同的操作系统有不同的系统调用方式,但通常都是在底层实现了对 DNS 缓存信息的读取操作。例如,在 Windows 系统中,应用程序可以通过相关的系统 API 来获取 DNS 缓存中的记录;在 Linux 系统中,也有对应的系统调用接口可供程序使用。这些接口允许浏览器向操作系统请求特定域名的 IP 地址解析结果,如果在操作系统的 DNS 缓存中有该记录,操作系统会将其返回给浏览器2。
  2. 网络库接口:操作系统通常会提供一些网络相关的库,这些库封装了底层的网络操作,包括对 DNS 缓存的访问。浏览器可以使用这些网络库提供的接口来获取 DNS 缓存信息。例如,在一些操作系统中,网络库会提供函数或方法,让浏览器能够查询特定域名的缓存解析结果。这样,浏览器不需要直接与操作系统的底层系统调用打交道,而是通过相对简单的网络库接口来获取所需的 DNS 缓存数据。

以下分别以几种常见的编程语言结合不同操作系统的常用 API 为例,介绍如何编程实现利用操作系统的 API 获取 DNS 缓存:

Windows 系统(使用 C 语言结合 DnsQuery API)

#include <windows.h>
#include <windns.h>

int main() {
    DNS_STATUS status;
    PDNS_RECORD pDnsRecord;
    // 要查询的域名,这里以示例域名为例,实际可替换为其他域名
    PCSTR domainName = "www.example.com"; 
    
    // 调用DnsQuery API进行查询,尝试获取DNS缓存或发起新查询
    status = DnsQuery(domainName, DNS_TYPE_A, DNS_QUERY_STANDARD, NULL, &pDnsRecord, NULL);
    if (status == ERROR_SUCCESS) {
        // 如果查询成功,遍历并输出DNS记录信息
        PDNS_RECORD currentRecord = pDnsRecord;
        while (currentRecord!= NULL) {
            // 输出IP地址等相关信息,这里简单示意,可根据实际细化处理
            printf("IP Address: %s\n", currentRecord->Data.A.IpAddress.String);
            currentRecord = currentRecord->pNext;
        }
        DnsRecordListFree(pDnsRecord, DnsFreeRecordListDeep);
    } else {
        // 如果查询失败,输出错误信息
        printf("DnsQuery failed with error code: %d\n", status);
    }
    return 0;
}

在上述代码中:

  1. 首先引入了必要的头文件 <windows.h> 和 <windns.h>,它们包含了在 Windows 环境下进行 DNS 查询相关操作所需的函数声明、结构体定义等内容。
  2. 在 main 函数里,定义了变量用于存储 DNS 查询的状态以及查询结果的记录指针等。
  3. 通过 DnsQuery 函数传入要查询的域名(示例中为 "www.example.com" )、记录类型(这里选择 DNS_TYPE_A 表示查询 IPv4 地址对应的记录)以及其他相关查询参数,尝试从本地 DNS 缓存获取记录,如果缓存没有则可能向外部 DNS 服务器发起查询。
  4. 根据查询结果进行不同处理,如果查询成功就遍历并输出获取到的 IP 地址等相关 DNS 记录信息,若失败则输出相应的错误代码提示信息。

Linux 系统(使用 C 语言结合 getaddrinfo API)

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <arpa/inet.h>

int main() {
    struct addrinfo hints, *result, *rp;
    int s;
    // 要查询的域名,可按需替换
    const char *domain = "www.example.com"; 
    
    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family = AF_UNSPEC;  // 支持IPv4和IPv6
    hints.ai_socktype = SOCK_STREAM;  // TCP类型的套接字

    // 调用getaddrinfo API进行查询,先查看本地DNS缓存
    s = getaddrinfo(domain, NULL, &hints, &result);
    if (s!= 0) {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s));
        return 1;
    }

    // 遍历查询结果并输出相关IP地址信息
    for (rp = result; rp!= NULL; rp = rp->ai_next) {
        void *addr;
        char *ipver;
        if (rp->ai_family == AF_INET) {
            struct sockaddr_in *ipv4 = (struct sockaddr_in *)rp->ai_addr;
            addr = &(ipv4->sin_addr);
            ipver = "IPv4";
        } else {
            struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)rp->ai_addr;
            addr = &(ipv6->sin6_addr);
            ipver = "IPv6";
        }
        char ipstr[INET6_ADDRSTRLEN];
        inet_ntop(rp->ai_family, addr, ipstr, sizeof(ipstr));
        printf("IP Address (%s): %s\n", ipver, ipstr);
    }

    freeaddrinfo(result);
    return 0;
}

  1. 包含了多个必要的头文件,如 <stdio.h> 用于标准输入输出操作、<stdlib.h> 用于内存管理相关操作、<netdb.h> 和 <arpa/inet.h> 用于网络地址相关的处理以及 DNS 查询功能实现。
  2. 在 main 函数中,先对 hints 结构体进行初始化,设置了地址族(支持 IPv4 和 IPv6)以及套接字类型等参数,然后调用 getaddrinfo 函数传入要查询的域名、相关参数提示信息以及用于存储结果的指针变量,该函数会先查看本地 DNS 缓存获取记录,若没有再按流程向外部 DNS 服务器查询。
  3. 根据 getaddrinfo 的返回结果进行处理,如果成功就遍历返回的地址信息列表,判断是 IPv4 还是 IPv6 地址并进行相应的格式转换后输出,若失败则输出对应的错误提示信息,最后释放申请的内存资源。

macOS 系统(使用 Objective-C 语言结合 CFHostCreateWithName API)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *domain = @"www.example.com";
        CFStringRef domainCF = (__bridge CFStringRef)domain;
        // 使用CFHostCreateWithName API创建主机对象,过程中会检查本地DNS缓存
        CFHostRef host = CFHostCreateWithName(kCFAllocatorDefault, domainCF);
        if (host!= NULL) {
            // 尝试获取主机的IP地址信息
            if (CFHostStartInfoResolution(host, kCFHostAddresses, NULL) == kCFHostStartInfoResolutionSuccess) {
                CFArrayRef addresses = CFHostGetAddressing(host, NULL);
                if (addresses!= NULL) {
                    CFIndex count = CFArrayGetCount(addresses);
                    for (CFIndex i = 0; i < count; i++) {
                        struct sockaddr_storage *addr = (struct sockaddr_storage *)CFArrayGetValueAtIndex(addresses, i);
                        char ipstr[INET6_ADDRSTRLEN];
                        if (addr->ss_family == AF_INET) {
                            struct sockaddr_in *ipv4 = (struct sockaddr_in *)addr;
                            inet_ntop(AF_INET, &(ipv4->sin_addr), ipstr, sizeof(ipstr));
                            NSLog(@"IP Address (IPv4): %s", ipstr);
                        } else if (addr->ss_family == AF_INET6) {
                            struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)addr;
                            inet_ntop(AF_INET6, &(ipv6->sin6_addr), ipstr, sizeof(ipstr));
                            NSLog(@"IP Address (IPv6): %s", ipstr);
                        }
                    }
                }
            }
            CFRelease(host);
        }
    }
    return 0;
}

在这段 Objective-C 代码中:

  1. 首先引入了 <Foundation/Foundation.h> 头文件,它提供了在 macOS 系统下进行基础开发的诸多类和函数等。
  2. 在 main 函数里,定义了要查询的域名字符串,并通过类型转换将其转换为 CFStringRef 类型,因为 CFHostCreateWithName 函数需要该类型的参数。
  3. 使用 CFHostCreateWithName 函数创建一个主机对象,在这个过程中,系统会先查看本地 DNS 缓存来获取对应的 IP 地址解析记录。如果创建成功,接着尝试启动信息解析获取主机的 IP 地址信息,若解析成功,获取到地址数组后,遍历该数组,根据地址的类型(IPv4 或 IPv6)进行相应的格式转换并输出 IP 地址信息,最后释放创建的主机对象占用的资源。

需要注意的是,以上代码示例只是简单演示如何利用对应操作系统的相关 API 获取 DNS 缓存相关信息,实际应用中可能需要根据具体需求进一步完善功能、添加错误处理以及适配更多复杂场景等。

参考内容:

浏览器获取本机的 DNS 缓存有多种途径。首先,可以通过开发者工具查看谷歌浏览器的 DNS 缓存,按下 F12 键打开开发者工具,切换到 “Application” 选项卡,在左侧导航栏的 “Storage” 选项中可查看相应缓存数据。此外,在 Windows 操作系统中,谷歌浏览器的缓存文件路径通常为 C:\Users\{用户名}\AppData\Local\Google\Chrome\User Data\Default\Cache,但直接打开该文件夹看到的是二进制文件,需借助特定工具才能查看具体内容。火狐浏览器可在地址栏中输入 about:cache,点击 disk→list cache entries 查看缓存信息。微软 Edge 浏览器输入 edge://net-internals/#dns 可查看与 DNS 相关的缓存信息,但此功能可能需要手动开启记录到本地磁盘才能正常查看具体内容,也可通过开发者工具查看缓存。

关于本机的 DNS 缓存获取,在 Windows 系统中可以使用 cmd 命令 ipconfig /displaydns 查看操作系统的 DNS 缓存。浏览器也会按照一定的频率缓存 DNS 记录,例如 chrome://net-internals/#dns 可以查看 Chrome 浏览器的 DNS 缓存。浏览器获取本机 DNS 缓存的途径并非单一,不同浏览器有不同的查看方式,同时也可以通过系统命令来查看操作系统层面的 DNS 缓存。

综上所述,浏览器获取本机 DNS 缓存可以通过自身的特定方式以及系统命令等多种途径来实现。

谷歌浏览器获取本机 DNS 缓存途径

在谷歌浏览器中,可以通过在地址栏输入 “chrome://net-internals/#dns” 来查看本机的 DNS 缓存。访问该页面后,会显示当前所有 DNS 缓存,通过点击 “Clear host cache”,可以清空所有 DNS 缓存。有时候此方法可能不能立刻生效,可以使用另外一个设置,在地址栏中输入 “chrome://settings/” 并回车,通过搜索 “预测网络操作” 找到配置项 “预测网络操作,以提高网页加载速度”,去掉前面的勾即可。此外,谷歌浏览器对每个域名会默认缓存 60s,但现在需要手动开启记录到本地磁盘才能正常查看具体内容。例如,当在谷歌浏览器的 url 地址栏输入 “chrome://net-internals/#dns” 后,页面会显示诸如 “Resolved lP addresses of ‘www.baidu.com’:(‘112.80.248.75’, ‘112.80.248.76’).No data on which protocols are supported.Host resolver cache” 的信息,这里的 “Host resolver cache” 就是主机解析器缓存,可以点击 “Clear host cache” 清除缓存记录。

火狐浏览器获取本机 DNS 缓存途径

在火狐浏览器中,可以在地址栏中输入 “about:config” 并回车,可能会出现一个警告信息,直接点击按钮进入,会出现火狐的所有配置信息。通过搜索 “dns” 进行过滤,可以看到一项名为 “network.dnsCacheExpirationGracePeriod” 项,它对应的值就是 DNS 缓存的时间,双击此项,会出现修改的提示框,填入 0(不缓存 DNS)即可。Firefox 有 dns 缓存功能,但是默认缓存时间只有 1 分钟,可以通过修改该默认值加快 DNS 解析速度,方法如下:打开一个新的窗口,地址栏输入 “about:config”,回车,进入设置界面。然后搜索 “network.dnsCacheExpiration”,把原来的 60 改成 6000(表示缓存 6000 秒),再搜索 “network.dnsCacheEntries” 把默认的 20 改成 1000(表示缓存 1000 条)。如果没有上面两个项目,可以在地址栏中输入 “about:cache” 并回车,点击 “disk(磁盘)→list cache entries(缓存条目列表)”,即可看到火狐浏览器的缓存信息,包括缓存文件的大小、类型、存储路径等。

微软 Edge 浏览器获取本机 DNS 缓存途径

在微软 Edge 浏览器中,可以输入 “edge://net-internals/#dns” 可查看与 DNS 相关的缓存信息,但此功能可能需要手动开启记录到本地磁盘才能正常查看具体内容。类似于谷歌浏览器,也可以通过开发者工具查看缓存。按下 F12 打开开发者工具,切换到 “Application” 选项卡,在 “Storage” 下查看 “Cookies”“Local Storage”“Session Storage” 等缓存数据。

Windows 系统通过 cmd 命令获取 DNS 缓存

在 Windows 系统中,可以通过 cmd 命令来获取和操作 DNS 缓存。首先按下快捷键 “win+r” 调出运行窗口,在窗口处输入 “cmd”。打开 “命令提示符” 窗口后,在窗口处输入命令 “ipconfig /displaydns” 来进行查看系统内的 DNS 缓存。如果要清空 DNS 缓存,可以执行命令 “ipconfig /flushdns” 命令。再次输入命令 “ipconfig /displaydns” 来确认是否清空了 DNS 缓存。成功后,系统将返回相应消息,如 “Windows IP Configuration Successfully flushed the DNS Resolver Cache.”。

浏览器获取本机 DNS 缓存的原理

浏览器获取本机 DNS 缓存是为了提高网页加载速度。不同的浏览器有不同的缓存机制和获取途径。一般来说,浏览器会优先检查自身的缓存,如果未命中则会进一步查询操作系统的缓存、hosts 文件等。例如,谷歌浏览器会先查询自身的 DNS 缓存,若未找到则会继续查询操作系统缓存等。火狐浏览器通过特定的配置项和命令来查看和操作 DNS 缓存。微软 Edge 浏览器则可以通过特定的地址和开发者工具来查看相关缓存信息。而 Windows 系统通过 cmd 命令可以直接查看和清空系统内的 DNS 缓存。这些方法都是为了提高网络访问的效率,减少 DNS 查询的时间,从而提升用户的上网体验。

浏览器获取本机 DNS 缓存的途径多种多样,不同的浏览器和操作系统提供了不同的方法。用户可以根据自己的需求和使用习惯选择合适的方式来查看和管理 DNS 缓存。无论是谷歌浏览器、火狐浏览器还是微软 Edge 浏览器,都在不断优化自身的缓存机制,以提供更快速、高效的网络访问体验。同时,Windows 系统的 cmd 命令也为用户提供了一种直接管理 DNS 缓存的方式,方便用户在需要时进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/917520.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】基于SPI协议读写SD,详解!

文章目录 0 前言1 SD卡的种类和简介1.1 SD卡的种类1.2 SD卡的整体结构1.3 SD卡运行机制——指令和响应2 SD卡的通信总线2.1 SDIO2.2 SPI3 硬件连接4 代码实践【重点】4.1 HAL库移植4.2 标准库移植4.3 遇到的问题和解决方案5 扩展阅读0 前言 因为项目需要,使用stm32读写sd卡,这…

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…

如何在Mysql中生成0-23完整的小时数据

目录 1. 创建表2. 插入0-23小时的数据3. 查询并合并数据 在数据分析中&#xff0c;我们经常需要对特定时间段内的数据进行统计和分析。 例如&#xff0c;在名片进线的场景中&#xff0c;我们可能需要了解一天内每小时的名片进线数量。 然而&#xff0c;由于某些时间点可能没有数…

厦门凯酷全科技有限公司正规吗?

在这个短视频风起云涌的时代&#xff0c;抖音作为电商领域的黑马&#xff0c;正以惊人的速度改变着消费者的购物习惯与品牌的市场策略。在这场变革中&#xff0c;厦门凯酷全科技有限公司凭借其专业的抖音电商服务&#xff0c;在众多服务商中脱颖而出&#xff0c;成为众多品牌信…

SpringBoot配置类

在Spring Boot中&#xff0c;配置类是一种特殊的类&#xff0c;用于定义和配置Spring应用程序的各种组件、服务和属性。这些配置类通常使用Java注解来声明&#xff0c;并且可以通过Spring的依赖注入机制来管理和使用。 Spring 容器初始化时会加载被Component、Service、Reposi…

ADS项目笔记 1. 低噪声放大器LNA天线一体化设计

在传统射频结构的设计中&#xff0c;天线模块和有源电路部分相互分离&#xff0c;两者之间通过 50 Ω 传输线级联&#xff0c;这种设计需要在有源电路和天线之间建立无源网络&#xff0c;包括天线模块的输入匹配网络以及有源电路的匹配网络。这些无源网络不仅增加了系统的插入损…

Vue2+ElementUI:用计算属性实现搜索框功能

前言&#xff1a; 本文代码使用vue2element UI。 输入框搜索的功能&#xff0c;可以在前端通过计算属性过滤实现&#xff0c;也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤&#xff0c;后附完整代码&#xff0c;代码中提供的是死数据&#xff0c;可…

【目标检测】用YOLOv8-Segment训练语义分割数据集(保姆级教学)

前言 这篇教程会手把手带你用 YOLOv8-Segment 搭建一个属于自己的分割任务项目。从环境配置到数据集准备&#xff0c;再到模型训练和测试&#xff0c;所有步骤都有详细说明&#xff0c;适合初学者使用。你将学会如何安装必要的软件&#xff0c;标注自己的数据&#xff0c;并使…

Elasticsearch:管理和排除 Elasticsearch 内存故障

作者&#xff1a;来自 Elastic Stef Nestor 随着 Elastic Cloud 提供可观察性、安全性和搜索等解决方案&#xff0c;我们将使用 Elastic Cloud 的用户范围从完整的运营团队扩大到包括数据工程师、安全团队和顾问。作为 Elastic 支持代表&#xff0c;我很乐意与各种各样的用户和…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐&#xff0c;所以我制作了两个基础的镜像&#xff0c;希望可以帮助大家节省时间&#xff0c;你可以选择其中一种进行安装&#xff0c;版本说明&#xff1a; base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel&#xff0c;默认 python 版本…

WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇&#xff08;本文&#xff09; WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前言…

AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型

1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展&#xff0c;越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中&#xff0c;从而显著提升运营效率和用户满意度。在这篇文章…

Blossom:开源私有部署的markdown笔记软件

在信息化、数字化时代&#xff0c;我们每个人的生活和工作都离不开笔记和知识管理。从简单的待办事项&#xff0c;到复杂的项目计划&#xff0c;再到存储大量个人知识的工具&#xff0c;如何选择一个高效、便捷且符合个人需求的笔记软件&#xff0c;成了许多人的难题。最近在逛…

Linux debian系统安装ClamTk开源图形用户界面(GUI)杀毒软件

一、ClamTk简介 ClamTk 是一个基于 ClamAV 的开源图形用户界面&#xff08;GUI&#xff09;杀毒软件。它使用 GTK2-Perl 脚本构建而成&#xff0c;支持32位与64位操作系统。ClamTk 提供了一个直观的用户界面&#xff0c;使得用户无需深入了解命令行即可完成大部分操作。它具备…

Linux 进程信号的产生

目录 0.前言 1. 通过终端按键产生信号 1.1 CtrlC&#xff1a;发送 SIGINT 信号 1.2 Ctrl\&#xff1a;发送 SIGQUIT 信号 1.3 CtrlZ&#xff1a;发送 SIGTSTP 信号 2.调用系统命令向进程发信号 3.使用函数产生信号 3.1 kill 函数 3.2 raise 函数 3.3 abort 函数 4.由软件条件产…

【大数据学习 | HBASE高级】hive操作hbase

一般在查询hbase的数据的时候我们可以直接使用hbase的命令行或者是api进行查询就行了&#xff0c;但是在日常的计算过程中我们一般都不是为了查询&#xff0c;都是在查询的基础上进行二次计算&#xff0c;所以使用hbase的命令是没有办法进行数据计算的&#xff0c;并且对于hbas…

微信小程序 https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中

授权登录后&#xff0c;拿到用户头像进行加载&#xff0c;但报错提示&#xff1a; https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中 解决方法一&#xff08;未完全解决&#xff0c;临时处理&#xff09;&#xff1a;在微信开发者工具将不校验...勾上就可以访问…

rk3399开发环境使用Android 10初体验蓝牙功能

版本 日期 作者 变更表述 1.0 2024/11/10 于忠军 文档创建 零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0…

1. Django中的URL调度器 (项目创建与简单测试)

1. 创建 Django 项目 运行以下命令创建一个名为 blog_project 的 Django 项目&#xff1a; django-admin startproject blog_project2. 创建博客应用 Django 中&#xff0c;项目可以包含多个应用。创建一个名为 blog 的应用&#xff1a; cd blog_project python manage.py …