实战!wsl 与主机网络通信,在 wsl 中搭建服务器。学了计算机网络,但只能刷刷面试题?那也太无聊了!这篇文章可以让你检测你的计网知识!

news2024/11/20 16:30:59

前言(碎碎念):每次发布文章时,我都是一个纠结的过程。因为我给自己写笔记时,只需要记录自己不清晰或者易忘的知识点就可以了,但一旦想要作为文章发布,那么我就得考虑到很多人是纯新手(就像我当初一样)。然后我就会一直想着怎么写才能对新手友好。但这样一来,就导致我太贪心了,结果文章越写越不满意,或者越写越繁多。很多太过简单的知识点我是真的一点也不想再记录了(比如最经典的配置环境变量……)。>
_
所以,考虑到本次的文章,本身的内容就已经足够多了,如果还有照顾到那些纯新手的话,文章内容就会变得更多。
_
所以,这篇文章就我就任性一点,只写给自己。

背景

遇到的问题:

  • 在 wsl ubuntu 中,发现无法与本机通信
  • 能通信后,发现无法访问 github
  • 搭建项目后,发现手机无法访问

文章按照顺序看就可以,推荐先简单的简单过一遍,因为其中的有些内容不是必需的,但我觉得很值得分享,所以就保留写来了。

速览 - 直接解释解决方案

想了想,还是提供一个速览吧,如果只想感觉解决问题,可以直接查看速览。

解决问题:在 wsl ubuntu 中,发现无法与本机通信

原因:本机的防火墙策略阻止了 wsl 的入站请求

解决方案:

win+r 允许 WF.msc,然后放开对 wsl 和以太网的保护策略

解决问题:能通信后,发现无法访问 github

最终原因:国内禁止访问, DNS 解析失败

解决方案一:配置代理:

export https_proxy=http://172.28.160.1:7890 http_proxy=http://172.28.160.1:7890
# 配置代理环境变量,注意 IP 要设置为本机中的 以太网适配器 vEthernet (WSL) IP 地址

curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh -o nvm.sh
# 再次请求,就能够访问了

解决方案二:修改 DNS


sudo sh -c 'rm /etc/resolv.conf && echo "nameserver 114.114.114.114" > /etc/resolv.conf'

解决问题:手机无法访问 wsl 中搭建的服务器,但本机可以

原因:大概率又是防火墙,或者路由解析相关问题。

这里直接使用简单的解决方案:配置 nginx 代理。在 window 中使用 nginx 可以查看 这篇文章

#  C:\nginx-1.25.4\conf\nginx.conf
events {
    worker_connections  1024;
}

http {
    server {
        listen 5555;
        server_name localhost;
        location / {
            # 这里要改为你的 wsl 的 ip 地址
            proxy_pass http://172.28.172.197:5555;
        }
    }
}




前提:

  • 已经 wsl --shutdown 过,发现无用。
  • 手机和电脑使用 USB 网络共享或使用热点
  • 已经安装并能正常使用 wsl ubuntu (版本为 22)
  • 系统已经开启 Hype-V 选项,参考 这篇文章
  • 查看 wsl 版本。如果不一致,那么我的解决方案可能对你无效
$ wsl --version
# WSL version: 2.0.14.0
# Kernel version: 5.15.133.1-1
# WSLg version: 1.0.59
# MSRDC version: 1.2.4677
# Direct3D version: 1.611.1-81528511
# DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
# Windows version: 10.0.19045.3803

先来查看 wsl ubuntu 和本机的 ip

  • pwsh 运行 ipconfig

$ ipconfig

#	以太网适配器 vEthernet (Default Switch):
#
#	   连接特定的 DNS 后缀 . . . . . . . :
#	   本地链接 IPv6 地址. . . . . . . . : fe80::224b:c4d1:4186:5ef%49
#	   IPv4 地址 . . . . . . . . . . . . : 172.24.48.1
#	   子网掩码  . . . . . . . . . . . . : 255.255.240.0
#	   默认网关. . . . . . . . . . . . . :
#
#	以太网适配器 vEthernet (WSL): 我们想要的是这个
#
#	   连接特定的 DNS 后缀 . . . . . . . :
#	   本地链接 IPv6 地址. . . . . . . . : fe80::eb1c:ea3f:60ef:1e01%61
#	   IPv4 地址 . . . . . . . . . . . . : 172.28.160.1
#	   子网掩码  . . . . . . . . . . . . : 255.255.240.0
#	   默认网关. . . . . . . . . . . . . :
#
#	以太网适配器 以太网 2:
#
#	   连接特定的 DNS 后缀 . . . . . . . :
#	   IPv4 地址 . . . . . . . . . . . . : 192.168.234.34
#	   子网掩码  . . . . . . . . . . . . : 255.255.255.0
#	   默认网关. . . . . . . . . . . . . : 192.168.234.99
  • ubuntu 运行 ifconfig,或者 ip addr
$ ip addr
#	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
#	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
#	    inet 127.0.0.1/8 scope host lo
#	       valid_lft forever preferred_lft forever
#	    inet6 ::1/128 scope host
#	       valid_lft forever preferred_lft forever
#	2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
#	    link/ether 00:15:5d:8e:fd:12 brd ff:ff:ff:ff:ff:ff
 	    inet 172.28.172.197/20 brd 172.28.175.255 scope global eth0
#	       valid_lft forever preferred_lft forever
#	    inet6 fe80::215:5dff:fe8e:fd12/64 scope link
#	       valid_lft forever preferred_lft forever

# 重点查看 inet 的值
$ ip addr | grep inet

#    inet 127.0.0.1/8 scope host lo
#    inet6 ::1/128 scope host
     inet 172.28.172.197/20 brd 172.28.175.255 scope global eth0
#    inet6 fe80::215:5dff:fe8e:fd12/64 scope link

可以看到,本机和 ubuntu 是位于同一个局域网(网段)中的(网络号相同)

主机:

    IPv4 地址 . . . . . . . . . . . . : 172.28.160.1
    子网掩码  . . . . . . . . . . . . : 255.255.240.0

网络编号/网络号为:172.28.160/20
主机号为:1

wsl ubuntu:

    inet 172.28.172.197/20 brd 172.28.175.255 scope global eth0

网络编号/网络号为:172.28.160/20
主机号为:12.197

如果两者不再同一个局域网内,则需要修改修改 wsl ubuntu 中的网卡 eth0

sudo ifconfig eth0 172.28.172.197 netmask 255.255.240.0
# 未测试

主机 ping 一下 wsl ubuntu 的 ip,查看是否可以通信

$ ping 172.28.172.197

#	正在 Ping 172.28.172.197 具有 32 字节的数据:
#	来自 172.28.172.197 的回复: 字节=32 时间<1ms TTL=64
#	来自 172.28.172.197 的回复: 字节=32 时间<1ms TTL=64
#	来自 172.28.172.197 的回复: 字节=32 时间<1ms TTL=64
#	来自 172.28.172.197 的回复: 字节=32 时间<1ms TTL=64

可以看到,是能够通信的。

然后,在 wsl ubuntu 中 ping 一下本机,查看能否通信

$ ping 172.28.160.1
# ...

可以发现 ping 不通

排查:先关闭防火墙测试一下是否是防火墙问题

先测试一下是否是防火墙问题。将本机的防火墙统统关闭,然后重新 ping,可以发现成功 ping 通。

在这里插入图片描述
在这里插入图片描述

然后选择关闭


如果发现还 ping 不同,再尝试关闭 ubuntu 中的所有防火墙。

$ sudo ufw status
# Status: inactive

$ sudo ufw enable
# Firewall is active and enabled on system startup

$ sudo ufw disable
# Firewall stopped and disabled on system startup

总之,我这里的情况是将本机的防火墙关闭后,就可以 ping 通了,
并且 wsl ubuntu 中可以 ping 通本机中的“以太网适配器 vEthernet (WSL)”和“手机提供的 USB 网络”

$ ping 172.28.160.1
#	PING 172.28.160.1 (172.28.160.1) 56(84) bytes of data.
#	64 bytes from 172.28.160.1: icmp_seq=1 ttl=128 time=0.236 ms
#	64 bytes from 172.28.160.1: icmp_seq=2 ttl=128 time=0.297 ms
#	64 bytes from 172.28.160.1: icmp_seq=3 ttl=128 time=1.05 ms
#	64 bytes from 172.28.160.1: icmp_seq=4 ttl=128 time=0.631 ms


$ ping 192.168.234.34    # 这个是手机提供的 USB 网络
#	PING 192.168.234.34 (192.168.234.34) 56(84) bytes of data.
#	64 bytes from 192.168.234.34: icmp_seq=1 ttl=127 time=0.299 ms
#	64 bytes from 192.168.234.34: icmp_seq=2 ttl=127 time=0.773 ms
#	64 bytes from 192.168.234.34: icmp_seq=3 ttl=127 time=0.555 ms
#	64 bytes from 192.168.234.34: icmp_seq=4 ttl=127 time=0.571 ms

找到原因:关闭防火墙后就能通信,所以大概率是“入站连接”被禁止

本机能够连通 wsl ubuntu,但 wsl ubuntu 却不能连通本机,说明是“入站”被禁止了。

实际上,防火墙中的配置(域、专用、公用),默认都是允许出站连接,阻止入站连接的,所以配置时基本就是配置允许入站连接,或者是禁用出站连接。

放行 wsl ubuntu 的 ip 地址,步骤如下:

  1. 打开防火墙(win+r 允许 WF.msc),新建一个入站规则
  2. 选择自定义规则
  3. 所有程序
  4. 直接下一步(协议类型为任何)
  5. 将规则应用于以下远程 IP 地址。
配置 以太网适配器 vEthernet (WSL),可以两种添加方式

    172.28.160.0/20
    # 可以添加子网/网段

    172.28.172.197
    # 也可以直接添加 ip

同理,配置以太网适配器 以太网 2 (也就是手机热点),也可以有两种方式:

    192.168.234.0/24

    或 192.168.234.34

  1. 直接下一页(允许连接)
  2. 直接下一页(包含域、专用、公用)
  3. 名称 允许 wsl2 入站

再次测试,发现可以 ping 通

$ ping 172.28.160.1
#	PING 172.28.160.1 (172.28.160.1) 56(84) bytes of data.
#	64 bytes from 172.28.160.1: icmp_seq=1 ttl=128 time=0.225 ms
#	64 bytes from 172.28.160.1: icmp_seq=2 ttl=128 time=0.531 ms
#	64 bytes from 172.28.160.1: icmp_seq=3 ttl=128 time=0.237 ms



$ ping 192.168.234.34
#	PING 192.168.234.34 (192.168.234.34) 56(84) bytes of data.
#	64 bytes from 192.168.234.34: icmp_seq=1 ttl=127 time=0.242 ms
#	64 bytes from 192.168.234.34: icmp_seq=2 ttl=127 time=0.594 ms
#	64 bytes from 192.168.234.34: icmp_seq=3 ttl=127 time=0.568 ms

ubuntu 能和本机通信,并不意味着能上网。

# TODO 未测试

$ ip route # 查看路由
#	default via 172.28.160.1 dev eth0 proto kernel
#	172.28.160.0/20 dev eth0 proto kernel scope link src 172.28.172.197

$ ip route del default # 删除默认路由

$ ip route add default via 172.28.160.1 dev eth0 # 添加默认路由

附加知识点: ICMP 和分组分组跟踪

ping 发送的是 ICMP 报文,也就是 IP 数据报中的数据部分为 ICMP 报文。

                    |--- ICMP Message ---|
                    ↓                    ↓
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
┃     Header        ┃      Data          ┃
┗━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━┛
↑                                        ↑
└---------------- IP Datagram -----------┘

可以 traceroute (window 中为 tracert)跟踪一个分组从源点到终点的路径。

如果没有 traceroute 命令,ubuntu 应该会提示你可以安装

sudo apt install inetutils-traceroute  # version 2:2.2-2ubuntu0.1, or 或者
sudo apt install traceroute            # version 1:2.1.0-2

wsl ubuntu 中跟踪分组路径:

$ traceroute 192.168.234.34
# traceroute to 192.168.234.34 (192.168.234.34), 64 hops max
#     1   172.28.160.1  0.244ms  0.136ms  0.150ms
#     2   192.168.234.34  0.181ms  0.089ms  0.095ms
# 如果出现 * 则表示超时

安装 nvm,但网络拒绝连接 Connection refused

curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh -o nvm.sh
curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 76 ms: Connection refused

方案一:使用代理解决

前提:你的本机电脑支持代理,并且配置了 7890 端口

export https_proxy=http://172.28.160.1:7890 http_proxy=http://172.28.160.1:7890
# 注意 ip 地址是 wsl ubuntu 中的默认路由/网关,也就是本机中的 以太网适配器 vEthernet (WSL) IPv4。
# 临时环境变量
# 重启后失效

echo -e 'export https_proxy=http://172.28.160.1:7890\nexport http_proxy=http://172.28.160.1:7890' >> ~/.bashrc
source ~/.bashrc
# 永久生效

然后通过 ping 测试一下,可以发现是连通的了

$ ping raw.githubusercontent.com
#	PING raw.githubusercontent.com (127.0.0.1) 56(84) bytes of data.
#	64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.012 ms
#	64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.058 ms
#	64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.041 ms
#	可以看到,所有的数据都是通过代理传进来的(虽然图中没有显示端口 7890)。

先了解 wsl ubuntu 中的 DNS 相关内容

首先,DNS 服务器的配置信息是在 /etc/resolv.conf 中。但在 wsl 的ubuntu 中,该文件其实是软连接:

$ file /etc/resolv.conf #  file 命令查看文件类型
#	/etc/resolv.conf: symbolic link to /mnt/wsl/resolv.conf

$  ls -l /etc/resolv.conf # ls -l 命令查看详细信息
#	lrwxrwxrwx 1 root root 20 Mar 17 08:55 /etc/resolv.conf -> /mnt/wsl/resolv.conf

查看文件内容(cat /etc/resolv.conf)可以看到:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.28.160.1

可以看到,文件中的注释信息告诉我们,该文件是 wsl 自动生成的,想要禁用自动生成,可以在 /etc/wsl.conf 文件中添加以下信息

[network]
generateResolvConf = false

这个自行选择。

我们这里想要做的工作其实只是修改 DNS 服务器

方案二:配置 DNS 解决域名解析错误

修改 DNS 步骤如下

先删除文件,因为原文件是软连接

sudo rm /etc/resolv.conf

然后重新创建文件。
注意要使用 sudo 权限,不然保存时会提示 “/etc/resolv.conf” E212: Can’t open file for writing

sudo vim /etc/resolv.conf

键入 i 写入下面信息,然后键入 ESC,键入 :wq 回车,保存退出

nameserver 114.114.114.114

如果你熟悉命令的话,上面步骤可以直接简化为:

sudo sh -c 'rm /etc/resolv.conf && echo "nameserver 114.114.114.114" > /etc/resolv.conf'> 

然后再次测试。可以看到,虽然速度变慢了很多(因为是使用国内网络),但至少能够使用。

$ curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh -o nvm.sh
#	  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#	                                 Dload  Upload   Total   Spent    Left  Speed
#	100 16555  100 16555    0     0   3176      0  0:00:05  0:00:05 --:--:--  4275

附加:使用 nslookup 测试一下域名解析

此时,你还可以通过 nslookup 命令测试一下域名解析。

$ nslookup raw.githubusercontent.com
#		Server:         114.114.114.114
#		Address:        114.114.114.114#53
#
#		Non-authoritative answer:
#		Name:   raw.githubusercontent.com
#		Address: 185.199.110.133
#		Name:   raw.githubusercontent.com
#		Address: 185.199.108.133
#		Name:   raw.githubusercontent.com
#		Address: 185.199.111.133
#		Name:   raw.githubusercontent.com
#		Address: 2606:50c0:8002::154
#		Name:   raw.githubusercontent.com
#		Address: 2606:50c0:8001::154
#		Name:   raw.githubusercontent.com
#		Address: 2606:50c0:8003::154

如果你是使用代理,你会发现解析域名是可能是无效果的。

$ nslookup raw.githubusercontent.com
#   Server:         172.28.160.1
#   Address:        172.28.160.1#53
#
#   Non-authoritative answer:
#   Name:   raw.githubusercontent.com
#   Address: 0.0.0.0
#   Name:   raw.githubusercontent.com
#   Address: ::

解决网络问题后,安装 nvm

前面的 curl 命令仅仅只是下载脚本,并没有安装,想要安装,我们可以根据官方文档来:

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

$ source ~/.bashrc

$ nvm install node

$ nvm current
# v21.7.1

创建一个简单的服务器项目

由于太过简单,这里就不详细说明了。直接给出命令


$ sudo mkdir /test-node-demo
# 创建一个测试文件夹

$ whoani
# 查看当前用户名。比如是 kee
# 可以通过 cat /etc/passwd | column -t -s ':' 查看所有用户

$ sudo chown -R kee /test-node-demo/
# 将新创建的文件夹拥有者交给当前用户

$ sudo chmod -R u+rw /test-node-demo
# 为当前用户提供 /text-node-demo 文件夹的读取权限

$ mkdir /test-node-demo/demo && cd $_
# 新建 demo 文件夹

$ npm init -y

$ npm i express


$ echo '
const  express = require("express")
const app = express()
app.get("/", (req, res) => {res.send("hello, world")})
app.listen(5000, () => {console.log("listen 5000")})
' > server.js
# 写入内容到 server.js 中

$ node server.js
# listen 5000

在主机打开 http://172.28.172.197:5000/ 可以成功访问到 hello, world!

手机热点无法访问 wsl 搭建的服务器

推荐直接使用 nginx 进行反向代理。在 window 中使用 nginx 可以查看 这篇文章

配置内容如下:

#  C:\nginx-1.25.4\conf\nginx.conf
events {
    worker_connections  1024;
}

http {

    server {
        listen 5555;
        server_name localhost;
        location / {
            # 这里添加刚刚能够在主机上访问的 ip 路径
            proxy_pass http://172.28.172.197:5000;
        }
    }
}

参考文章

  • nginx 基本使用、借助 nginx 和 mkcert 实现本地 https://localhost 测试。
  • win家庭版安装 docker,用于运行 vscode 上的 GitHub 案例容器
  • WSL2 网络异常排查 ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截 - 简书 (jianshu.com)
  • Failed to connect to raw.githubusercontent.com:443 - 知乎 (zhihu.com)
  • Node Version Manager

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1TGE120011R1111变频器全国发货质保一年

1TGE120011R1111 ABB ABB的1TGE120011R1111是一个属于其TGE系列的小型断路器&#xff08;也称为微型断路器或MCB&#xff09;。这个系列的断路器主要用于低压配电系统&#xff0c;为电路提供过载和短路保护。以下是这款断路器的一些特点&#xff1a; 紧凑设计&#xff1a;TGE系…

【数据库】数据库基本知识

1.数据库的四个基本概念 1.1 数据&#xff1a;描述事务的符号记录 1.2 数据库&#xff1a;概括的说&#xff0c;数据库数据具有永久存储、有组织的、可共享的大量数据的集合&#xff0c;数据库中的数据按一定的数据模型组织、描述和储存&#xff0c;具有较小的冗余度、较高的…

2、鸿蒙学习-申请调试证书和调试Profile文件

申请发布证书 发布证书由AGC颁发的、为HarmonyOS应用配置签名信息的数字证书&#xff0c;可保障软件代码完整性和发布者身份真实性。证书格式为.cer&#xff0c;包含公钥、证书指纹等信息。 说明 请确保您的开发者帐号已实名认证。每个帐号最多申请1个发布证书。 1、登录AppGa…

AI美图设计室试用,可以生成PPT,以及模特试衣

文章目录 美图设计室试用 美图设计室试用 美图设计室是美图秀秀的公司推出的AI图像处理工具&#xff0c;其功能涵盖图片编辑、抠图、海报设计、文生图等常用的AI功能。尽管很多功能需要开通会员使用&#xff0c;但一些免费功能的表现也还不错&#xff0c;值得一用。 美图设计…

【解读】NIST网络安全框架CSF 2.0

2014年&#xff0c;NIST&#xff08;美国国家标准与技术研究所&#xff0c;类似于中国的工信部&#xff09;首次发布了网络安全框架CSF&#xff08;Cybersecurity Framework)&#xff0c;十年后&#xff0c;在2024年2月26日发布了重大更新&#xff08;CSF 2.0&#xff09;&…

【蓝屏分析】WHEA_UNCORRECTABLE_ERROR 问题分析与解决

背景信息 电脑名字电脑类型厂商使用时间magicbook14 2020款 R5 4500U笔记本电脑荣耀HONOR3年9个月 内存CPUGPU硬盘焊死在主板上焊死在主板上集显PCIe 4.0 NVMe M.2 固态 软硬件错误源确定 电脑莫名频繁随机蓝屏&#xff0c;由于在软件环境上无迹可寻推测是硬件问题 蓝屏画面…

Pretrain-finetune、Prompting、Instruct-tuning训练方法的区别

来自&#xff1a;【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调_多模态指令跟随数据-CSDN博客 几种模型训练方法的区别&#xff1a; 1、Pretrain-finetune&#xff1a;先在大量数据集上做预训练&#xff0c;然后针对某个子任务做 finetune 2…

Python图像处理指南:PIL与OpenCV的比较【第136篇—PIL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python图像处理指南&#xff1a;PIL与OpenCV的比较 图像处理在计算机视觉和图像识别等领域…

实现悲观协议,除了锁还能咋办?

相对乐观和局部悲观是一体两面的关系&#xff0c;识别它的要点就在于是否有全局有效性验证&#xff0c;这也和分布式数据库的架构特点息息相关。但是关于悲观协议&#xff0c;还有很多内容没有提及&#xff0c;下面我们就来填补这一大块空白。 悲观协议的分类 要先跳出来&…

Word使用通配符替换

1.通配符替换 使用&#xff08;[通配替换文本]&#xff09; M-MM12-00([0123456789])-0([0123456789])([0123456789])-0([0123456789])([0123456789]) 2.根据自定义格式替换 根据格式、样式替换&#xff0c;如只替换标题的内容&#xff0c;不替换征文

ASP.NET 服务器控件

目录 一、使用的软件 1、下载 2、新建文件&#xff08;写一个简单的web网页&#xff09; 二、相关知识点 1、Web窗体网页的组件 &#xff08;1&#xff09;可视化组件 &#xff08;2&#xff09;用户接口逻辑 2、Web Form网页的代码模型 &#xff08;1&#xff09;单文件…

STM32的USART能否支持9位数据格式话题

1、问题描述 STM32L051 这款单片机。平常的 USART 串口传输是 8 位数据&#xff0c;但是他的项目需要用串口传输 9 位数据。当设置为 8 位数据时&#xff0c;串口响应中断正常。但是&#xff0c;当设置为 9 位数据时&#xff0c;串口就不产生中断了。USART2 的 ISR 寄存器 RXN…

前端基础篇-深入了解 JavaScript(一)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 JavaScript 概述 2.0 JS - 引入方式 3.0 JS - 基础语法 4.0 JS - 数据类型 5.0 JS - 函数 6.0 JS - Array 数组 7.0 JS - String 字符串 1.0 JavaScript 概述…

Java推荐算法——特征加权推荐算法(以申请学校为例)

加权推荐算法 文章目录 加权推荐算法1.推荐算法的简单介绍2.加权推荐算法详细介绍3.代码实现4.总结 1.推荐算法的简单介绍 众所周知&#xff0c;推荐算法有很多种&#xff0c;例如&#xff1a; 1.加权推荐&#xff1a;分为简单的特征加权&#xff0c;以及复杂的混合加权。主要…

Qt文件读写

做一个简单的文件读写&#xff0c;我们把一个结构体内的数据写入到二进制文件中&#xff0c;并重新读取解析。代码结构如下&#xff1a; 项目名称随便起就好了。main.cpp是主函数&#xff1b;DataHandler实现文件的写与读&#xff0c;还要模拟过程&#xff1b;Definition.h放置…

蚁群算法实现 - 全局路径规划算法

参考博客&#xff1a; &#xff08;1&#xff09;【人工智能】蚁群算法(密恐勿入) &#xff08;2&#xff09;计算智能——蚁群算法 &#xff08;3&#xff09;蚁群算法(实例帮助理解) &#xff08;4&#xff09;【数之道 04】解决最优路径问题的妙招-蚁群ACO算法 &#xff08;…

51单片机—DS18B20温度传感器

目录 一.元件介绍及原理 二&#xff0c;应用&#xff1a;DS18B20读取温度 一.元件介绍及原理 1.元件 2.内部介绍 本次元件使用的是单总线 以下为单总线的介绍 时序结构 操作流程 本次需要使用的是SKIP ROM 跳过&#xff0c; CONVERT T温度变化&#xff0c;READ SCRATCHPAD…

IP对讲终端SV-6002 可以选配POE供电方式

18123651365微信 IP对讲终端SV-6002是一款采用了ARMDSP架构&#xff0c;接收网络音频流&#xff0c;实时解码播放&#xff1b;配置了麦克风输入和扬声器输出&#xff0c;作为网络数字广播的播放终端。主要用于银行、部门机构、酒店等场所的网络广播、网络对讲。 I…

华为PixArt-α:高质量、低成本的文生图模型,训练时长只有SD 1.5的10.8%

2024年3月11日由华为诺亚方舟实验室、大连理工大学和香港大学的研究团队共同开发的PixArt-Σ是一款能够直接生成4K分辨率图像的扩散变换模&#xff08;DiT&#xff09;。PixArt-Σ相比其前作PixArt-α&#xff0c;在图像质量和文本提示对齐方面有了显著提升&#xff0c;展示了从…

Mybatis-xml映射文件与动态SQL

xml映射文件 动态SQL <where><if test"name!null">name like concat(%,#{name},%)</if><if test"username!null">and username#{username}</if></where> <!-- collection&#xff1a;遍历的集合--> <!-- …