news 2026/8/31 15:23:40

基于MATLAB的OCT仿真实现:从原理到毕业设计全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于MATLAB的OCT仿真实现:从原理到毕业设计全攻略

简介:本资源是一套面向电子信息、通信工程及生物医学工程等专业本科生的毕业设计实践材料,聚焦光学相干断层扫描(OCT)成像原理的MATLAB仿真实现,解决学生在课程设计与毕设中缺乏完整仿真框架与可运行代码的痛点。压缩包共135个文件,含109个核心MATLAB脚本(如光谱域OCT信号生成、干涉图重建、A-scan/B-scan图像处理等关键模块)、12张结果可视化PNG图、4个预存数据MAT文件、3份PDF格式系统设计文档与研究报告、以及配套说明文本与Markdown指南,整体体积仅4.92MB,轻量易部署。资源已获47人学习下载,内容覆盖从理论建模、数值仿真到图像后处理的全流程,所有代码经实测稳定运行,并支持二次开发——例如基于现有spectral-domain OCT框架拓展相位分析或运动校正模块,适合作为教学演示、项目原型或进阶科研的可靠起点。 搞毕业设计最怕什么?题目看着高大上,打开电脑不知道第一行代码写什么。“OCT仿真在MATLAB中的实现”就是这么个题目——光学相干层析成像(Optical Coherence Tomography)三个字母摆在标题里,很多人第一反应是“这得懂多少光学知识”。其实拆开看,核心就是光源、干涉、傅里叶变换三件事,而且MATLAB天生就是干这个的。这个zip里有完整源码和说明文档,照着跑能出图,但想在答辩时不慌、老师一问就接得住,得把这些代码背后的原理和坑都弄明白。这篇文章就帮你做这件事。

1. 项目整体设计与思路拆解

1.1 OCT仿真在做什么:先吃透原理再动手

OCT说白了就是“光学版本的超声成像”,只不过它用的是低相干光,而不是声波。一个典型的频域OCT系统包含宽带光源、迈克尔逊干涉仪、光谱仪或扫频光源、探测器。光从光源出来后被分束器分成两路——一路打到参考镜,一路打到样品上,两路反射光重新汇合形成干涉信号。因为光源的相干长度很短,只有当参考光和样品光走过的光程差在相干长度之内时,干涉才会明显,这个特性就给了系统“深度选择”的能力。

时域OCT(TD-OCT)靠机械移动参考镜来逐个深度扫描,一条A-scan(深度方向的一维信号)要扫很久。频域OCT(FD-OCT)就聪明得多,它一次性把整个光谱的干涉信号采下来,然后做一次逆傅里叶变换(IFFT),整条深度信息全出来了。这就是为什么现在商用OCT几乎全是频域方案:速度快,灵敏度还高。仿真的时候我们当然选频域OCT,因为直接对光谱做IFFT,计算量小,逻辑也直观。

仿真的本质是:在计算机里定义样品结构,算出干涉光谱,再做逆傅里叶变换还原出样品的深度剖面。这个过程把一个需要光学平台的实验压缩成了一行ifft调用,你不需要真的搭桌子、对光路,只要把物理模型写对,就能看到OCT图像长什么样。这也就是毕业设计选这个题目的价值所在——它既有物理深度,又不需要你烧钱买器件。

1.2 毕业设计需求分析:先定目标再写代码

很多同学拿到项目先急着写代码,后来发现写了半天不知道自己到底要验证什么。我建议第一步把需求列清楚,至少包含三类:

核心功能需求:能配置光源参数(中心波长、带宽、采样点数),能定义样品结构(多层反射面、连续散射介质),能生成模拟干涉光谱,能重建A-scan并在屏幕上显示,能横向扫描生成B-scan图像。这是底线。

扩展功能需求:给信号加噪声,对比去噪前后效果;改变光源带宽观察分辨率变化;改变折射率模拟不同生物组织的成像差异;加色散补偿模块。这些功能不用全做,挑两个跟论文方向搭的,深度做透,答辩时反而有亮点。

交付物需求:可运行的MATLAB源码、一份毕业设计论文(含原理、仿真结果、分析)、答辩PPT。论文通常包括绪论、OCT原理、仿真系统设计、结果验证与分析、总结与展望五章。源码部分要有注释,命名规范,最好带README。

把这些写在一页纸需求清单上,后面所有工作都围绕它展开,就不会做着做着跑偏。

1.3 技术选型:MATLAB的优势与边界

为什么OCT仿真用MATLAB最顺手?第一,OCT重建的核心操作就是傅里叶变换,MATLAB的fft/ifft是内置的高度优化函数,一行代码调用,不需要自己实现FFT算法。第二,整个干涉信号本质上是数组运算,MATLAB的矩阵操作和向量化语法能省掉大量循环,代码写起来简洁。第三,可视化太方便了,plot、imagesc、colormap几个命令就能把A-scan曲线和B-scan图像画出来,做答辩展示特别直观。

但MATLAB也有明显的边界。它的for循环效率远低于C/C++或Python(特别是老版本),如果你在B-scan仿真里写一个“对每个横向位置调一次for循环”的朴素实现,几百条A-scan可能要跑几十秒。解决思路是尽量向量化:把横向位置也放进来一起算,哪怕内存换速度,也比纯循环强。另一个边界是MATLAB许可证不便宜,但学校实验室基本都有正版license,这不是问题。如果你导师要求免费方案,Octave也能跑通大部分代码,只是图像渲染和某些工具箱有差异,我在后面“常见问题”里会提到。

2. 核心细节解析与实操要点

2.1 光源模型:高斯谱决定了你的分辨率天花板

OCT仿真的第一件事是生成光源光谱。常见的光源是超辐射发光二极管或扫频激光器,光谱形状近似高斯。核心参数有三个:

  • 中心波长 λ₀:典型值840nm(眼科视网膜成像)或1300nm(深层组织/工业检测)。波长越长,散射越弱、穿透越深,但分辨率越差。
  • 光谱半高全宽 Δλ:典型值30-100nm。带宽越大,轴向分辨率越高。
  • 采样点数 N:典型值1024、2048、4096。点数越多,最大成像深度越大。

轴向分辨率公式是 δz = (2ln2/π) · λ₀²/Δλ。以840nm和50nm带宽为例,代入计算:δz ≈ 0.44 × 840² / 50 nm ≈ 6.2μm。这个量级意味着OCT能分辨十几微米的结构层,比超声精细得多。所以你在论文里写“系统理论分辨率约6.2μm”,不是拍脑袋,是算出来的。

在MATLAB里生成高斯光谱有两种做法:在波长域定义,或者在波数域定义。在实际代码中我更推荐在波数域工作,因为傅里叶重建要求k空间采样是均匀的。波长域均匀采样转成波数域后,k间隔就不均匀了,直接FFT会产生图像畸变。这是后来很多调试问题的根源,下面重点讲。

2.2 样品模型:分层散射模型怎么搭

样品的建模决定了你仿真出来的图像“像不像回事”。OCT信号主要来自折射率突变处的反射,所以最简单的模型就是设置若干层界面,每层给一个反射率,比如玻璃表面反射率约4%,生物组织内散射点的等效反射率可能只有10⁻⁴~10⁻⁶。

具体做法是把样品深度方向离散成网格z,比如从0到2mm,步长1μm,共2000个点。然后在指定深度位置放置反射峰。用菲涅尔公式可以估算界面反射率:R = ((n₁-n₂)/(n₁+n₂))²。比如空气(n=1.0)到角膜(n≈1.38),反射率约为((0.38)/(2.38))² ≈ 0.025,即2.5%。把这些反射率赋值到对应的深度索引上,样品反射率向量R(z)就建立好了。

如果想做得逼真一点,可以在每层之间加一点随机散射噪声,模拟组织内部的微小折射率起伏,这样B-scan图像里会有真实的颗粒感,而不是只有两根干净的线。

2.3 干涉信号与傅里叶重建:核心中的核心

干涉光谱信号可以写成:

I(k) = S(k) · [1 + 2Σᵢ √(Rᵢ)·cos(2k·zᵢ)]

其中S(k)是光源光谱强度,Rᵢ是第i个反射面的反射率,zᵢ是反射面到参考面之间的距离(光程差的一半),k=2π/λ。这个公式忽略了自相关项和色散等二阶效应,对毕业设计已经完全够用。

为什么I(k)做IFFT就能恢复深度信息?关键在于cos(2kzᵢ)里包含了一个随k振荡的相位项,振荡频率恰好正比于zᵢ。对k做傅里叶变换时,不同频率的振荡分量会落到不同深度位置,形成一个脉冲,这就是A-scan里的峰。

实际处理时有一个坑:I(k)里除了互相关项(我们想要的cos项),还有DC项(常数1),它会在z=0处产生一个很大的直流峰。如果不处理,图像中心会非常亮,旁边的真实结构都看不清。解决办法通常是去直流,也就是从信号中减去平均值,或者做中值滤波。再者,样品中不同反射面之间还会产生“自相关项”,表现为镜像峰,这在弱散射近似下可以忽略,但你要知道它存在,否则看到多余峰会被吓一跳。

另一个重要点是k空间重采样。如果你用光谱仪测数据,采集到的光谱是按波长均匀采样的,但IFFT要求在k域均匀采样,所以必须把光谱从波长域插值到波数域。仿真时可以直接在k域均匀生成光谱,绕开这个问题,但在论文里要主动说明,不然答辩老师可能会追问“你的k空间采样是否均匀”。

2.4 加噪与降噪:让仿真贴近真实

任何探测器都有噪声,仿真不加油盐就不真实。OCT系统里主要噪声源包括:

  • 散粒噪声:由光子到达的随机性造成,强度服从泊松分布,近似可以按高斯白噪声处理。
  • 热噪声:探测器热运动引起的电子噪声,高斯分布。
  • 固定模式噪声:探测器像元响应不一致造成的背景条纹,对B-scan表现为纵向条纹,一般通过背景减除来去除。

在MATLAB里添加噪声可以用randn函数,比如:

noise_power = 0.01; % 噪声功率 I_noisy = I_spectrum + sqrt(noise_power) * randn(size(I_spectrum));

加完后,重建出的A-scan里会出现背景毛刺,信噪比明显下降。这时你可以引入最简单的降噪手段:对光谱做S-G平滑滤波,或者对重建图像做中值滤波。做一个“无噪声→有噪声→去噪后”的对比图,放在论文里非常有说服力。

信噪比的计算建议写成函数,SNR = 20log10(信号峰值幅度/背景噪声标准差)。这样你可以在不同噪声功率下画一条SNR曲线,作为仿真结果分析的一部分,显得工作量很足。

3. 实操过程与核心环节实现

3.1 程序目录怎么组织

拿到一个毕设项目,先把文件结构想清楚,别把几百行代码堆在一个main.m里。我常用的组织方式是:

OCT_sim/ ├── README.md ├── run_main.m % 主入口,运行整个仿真流程 ├── params/ │ └── set_params.m % 集中定义所有参数 ├── src/ │ ├── gen_spectrum.m % 生成光源光谱 │ ├── gen_sample.m % 定义样品反射率模型 │ ├── gen_interference.m % 计算干涉光谱 │ ├── reconstruct_ascan.m % IFFT重建 │ └── add_noise.m % 加噪声 ├── result/ │ ├── ascan.png % 输出图 │ └── bscan.png └── docs/ └── 论文草稿.md

这样的好处是每个函数都可以单独测试,出问题时能快速定位,论文里也好画框图。

3.2 A-scan仿真:五步跑通第一个结果

我直接把核心代码的关键逻辑拆开讲。第一步,定义参数:

c = 3e8; lambda0 = 840e-9; % 中心波长 840nm delta_lambda = 50e-9; % 光谱带宽 50nm N = 2048; % 采样点数 % 波数范围按带宽计算 k_min = 2*pi/(lambda0 + delta_lambda/2); k_max = 2*pi/(lambda0 - delta_lambda/2); k = linspace(k_min, k_max, N).'; k0 = 2*pi/lambda0; sigma_k = (k_max - k_min) / (2*sqrt(2*log(2))); S = exp(-((k - k0).^2) / (2*sigma_k^2)); % 高斯光谱

第二步,建立样品模型:

z_max = 2e-3; % 最大深度 2mm Nz = 4000; % 深度离散点数 z = linspace(0, z_max, Nz).'; R = zeros(Nz, 1); R(abs(z - 300e-6) < 5e-6) = 0.05; % 深度300μm处反射率5% R(abs(z - 800e-6) < 5e-6) = 0.02; % 深度800μm处反射率2%

注意这里用5μm的宽度替代一个理想脉冲,避免离散网格恰好落到峰谷导致信号丢失。

第三步,计算干涉光谱。这里用向量化写法替代for循环:

% 对每个k点,累加所有深度反射面的贡献 I = S .* (1 + 2 * sum( sqrt(R(:)') .* cos(2 .* k * z(:)') , 2));

这行的数学结构对应 I(k) = S(k)[1 + 2Σ√R_i cos(2kz_i)]。如果内存允许,也可以把cos矩阵预先算好,节省重复计算。

第四步,重建A-scan:

A = ifft(I); A_amp = abs(A); z_axis = (0:N-1).' * (2*pi/(2*(k(2)-k(1)))); % 深度轴 z_axis = z_axis / N; % 只取前一半,因为镜像峰在后半段 A_amp = A_amp(1:N/2); z_axis = z_axis(1:N/2);

第五步,显示:

figure; plot(z_axis*1e6, A_amp); xlabel('深度 (μm)'); ylabel('幅度'); title('A-scan重建结果');

跑出来应该能看到两个峰,位置分别在300μm和800μm附近,幅度与反射率成正比。第一个峰前可能还有一个DC峰,如果明显就把I先减去mean(I)再ifft。

3.3 从A-scan到B-scan:二维成像怎么做

OCT图像是二维甚至三维的。B-scan相当于把样品横着切开,横轴是横向位置,纵轴是深度。仿真里,你只需让样品在横向上变化,比如中间有一段凹陷,或者有一个圆形模拟肿瘤区域,然后逐列做A-scan,把所有A-line拼成矩阵再显示。

为了避免for循环拖慢速度,可以把横向维度直接放进矩阵:假设样品有200个横向位置,那么散射矩阵是200×Nz,干涉光谱矩阵是200×N,一次性算出所有谱,再沿第二维做ifft。有一个地方要注意:ifft默认对所有维度变换,所以要指定维数:

B_scan = abs(ifft(I_2d, [], 2));

显示B-scan时,建议先取对数,否则弱反射层会被强反射层淹没:

imagesc(x_pos*1e3, z_axis*1e6, 20*log10(B_scan.')); axis xy; colormap gray; colorbar; xlabel('横向位置 (mm)'); ylabel('深度 (μm)');

这样出来的图像基本就是OCT论文里那种灰阶截面图,放一段“不同散射模式对成像效果影响”的分析,答辩时非常抓眼球。

3.4 结果验证与参数分析

仿真跑通了不算完,毕业设计的“研究深度”体现在参数分析上。我建议做三组实验:

  • 分辨率验证:固定中心波长,把带宽分别设为30nm、50nm、100nm,重建同一界面层,测量峰宽,看是否跟理论分辨率趋势一致。
  • 深度验证:把样品反射面分别放在0.2mm、0.5mm、1mm处,检查重建峰的位置是否线性对应,顺便验证最大成像深度。
  • 噪声鲁棒性:给光谱加不同信噪比的噪声,看A-scan峰是否还能清晰分辨,画出SNR随噪声变化的曲线。

这三组实验做完,论文就有了“结果与分析”章节的骨架,答辩时每张图都能讲出验证了什么、结论是什么。别小看这些实验,很多同学只跑出一个图就交差,答辩时被问“你这个仿真的正确性怎么证明”就愣住了。

4. 常见问题与排查技巧实录

4.1 A-scan为什么是镜像的

很多人第一次做频域OCT仿真,发现A-scan在z=0两侧都有峰,而且是镜像对称的两个峰。原因是干涉光谱I(k)是实函数,实信号的IFFT结果是共轭对称的,正深度和负深度都会出现能量。解决办法是只取深度轴正半轴(前N/2个点),或者先把I(k)的均值减去,让负深度对应的共轭项被压制。这是频域OCT的固有特性,不是代码写错了,但论文里要解释清楚。

4.2 DC分量太强怎么办

如果sample界面反射率很低,而直流项是常数1,那么A-scan里z=0处会有一个巨峰,旁边的结构峰几乎看不见。处理顺序建议是:先算光谱均值,然后将I减去均值,再做ifft。如果均值太大,也可以先做一阶高通滤波,或者用小波去趋势项。在代码里,一行I_ac = I - mean(I)就够了。

4.3 深度位置对不上

有读者反馈重建峰位置比预设偏了半格。深度轴的计算是关键点,如果你用的是均匀k采样,深度轴的间隔是2*pi/(2*dk*N),其中dk是k的采样间隔。很多人在这一步直接用linspace(0, z_max, N)随便画一条轴,那位置肯定对不上。我的建议是先根据公式算出z_axis,在仿真脚本里用预设深度位置验证一遍,确认对齐后再去做B-scan。

还有一点要注意:干涉公式里cos(2kz)中的z是“光程差的一半”,如果样品折射率不是1,光学深度还要乘以折射率。这是个容易忽略的细节,论文里写明“本仿真基于空气中光程差,组织折射率效应可作为扩展工作”就行。

4.4 代码跑得很慢

如果你的B-scan用双层for循环写,每个横向位置、每个k点都循环一遍,N=2048时要跑几十秒甚至几分钟。解决方法是向量化:把横向位置放进矩阵的一个维度,一次算出所有干涉光谱,再一次性ifft。如果内存不够,可以用single类型存储矩阵,参数从double改成single,速度能提升不少。另外,cos函数在矩阵上计算也快,但需要预先算出相位矩阵存储,这个矩阵可能很大,建议控制在几百万元素以内。

4.5 毕业设计zip包解压与文件问题

这个zip我拿到手第一件事就是验证能不能正常解压。你从网盘下载后如果提示“file is not a zip file”,八成是下载不完整,文件扩展名是.zip但头部数据缺失,重新下载一次就好。如果解压出来中文字符变成乱码,通常是压缩包编码问题,Windows下用Bandizip或7-Zip打开,在解压选项里选择“自动检测编码”,或者用命令行unzip -O gbk解决。另外,如果你在网上付费买的源码包,需要密码才能解压,务必先确定来源可靠,解压密码一般在商品详情页。

现象原因解决方案
解压提示file is not a zip file下载不完整/文件损坏重新下载,核对大小
zip内文档乱码压缩包编码非UTF-8用7-Zip/Bandizip改编码解压
需要密码作者加密保护确认合法授权,联系来源方
MATLAB打开m文件直接闪退版本兼容问题依次检查路径、函数名冲突
ifft结果全为NaNI谱里有NaN/Inf检查参数k不为0,去掉空值

5. 源码与文档交付:毕设答辩怎么准备

5.1 源码写清楚注释和README

毕业设计答辩评委不一定仔细跑你的代码,但肯定会翻看源码结构。我给源码加注释的原则是:每个函数头部写明“输入参数”“输出结果”“修改日期”,关键行用中文注释解释它的物理含义。比如I = S .* (1 + 2*sum(...))这一行,注释就写“干涉光谱:常数1代表直流项,2∑√Rcos代表互相关项”。README里要写清楚“运行run_main.m即可复现全部结果,结果保存在result目录”,这样任何一个同学拿你的代码都能跑通。

5.2 论文结构怎么写

论文直接从标准模板来写最稳妥。第一章绪论,说明OCT在眼科、心血管、工业检测等场景的价值;第二章OCT原理,要写清时域和频域的区别、分辨率公式推导;第三章系统设计,画系统框图,把每个函数的职责写清楚;第四章仿真结果与分析,放上A-scan、B-scan、参数分析对比图;第五章总结与展望,客观说明简化模型的局限,提出速度提升、三维成像等方向。

我特别要提醒一点:论文里的公式不要直接贴代码,要写成数学形式。比如频域OCT核心公式那一段,要写出干涉光谱方程,标明每个符号的物理意义,然后用文字说明“该式经IFFT可得到深度方向的一维散射强度分布”。公式是答辩老师看“你到底懂不懂原理”的最快检验方式。

5.3 答辩演示3分钟抓住重点

答辩PPT别把源码贴上去,评委根本不看代码细节。我的思路是:第一页展示一张OCT临床图像和应用背景,让评分老师快速知道这个技术多重要;第二页画一张原理框图,讲清楚光路和信号处理流程;第三页抛出“仿真要解决的问题”,比如不同反射层怎么区分、分辨率怎么提升;接下来放三张核心结果图:A-scan、B-scan、参数分析曲线,每张图配一句结论;最后列出改进点和参考文献。

演示的时候,提前把MATLAB脚本跑一遍,确保环境正常。我见过有人答辩现场临时运行,图还没出来时间就到了。稳妥做法是录一段运行视频放在PPT里,或者把关键图导出成高清PNG,现场只放图不跑代码。

结尾:一点个人体会

做这个仿真项目最大的收获,不是学会了几个MATLAB函数,而是真正理解了“信号处理如何服务于一个物理问题”。我第一次跑出A-scan时,看到两个清晰峰出现在预设深度,那种“物理定理在屏幕上复现”的感觉,比任何时候看教材都扎实。如果你做这个题目,建议从最简单的三层模型开始,跑通后再慢慢加噪声、加复杂样品、加色散补偿,每一步改动都会让你对OCT的理解深一层。这个源码包只是一个起点,真正值钱的是你在调试过程中积累的判断力——哪里可能出现镜像峰、为什么深度轴偏一格、信噪比怎样才够看,这些经验换一个题目照样用得上。后面如果有时间,可以再往三维体绘制、深度学习去噪方向扩展,那就是一篇不错的研究生论文了。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 15:22:49

公共服务场景选AI办公:私有化、集成和合规怎么落地

先看结论 公共服务场景选 AI 办公&#xff0c;不能只拿“能在线编辑”当门槛。真正绕不过去的是四件事&#xff1a;数据放在哪里、权限怎么分、能不能接进既有系统、后续出了问题谁负责。 在这个框架里&#xff0c;石墨办公可以进入候选池&#xff0c;尤其适合要私有化、要系统…

作者头像 李华
网站建设 2026/8/31 15:18:56

零代码生存分析实战:Cox回归与列线图建模全流程指南

医学生零代码生存分析实战&#xff1a;Cox回归、列线图建模、K-M曲线、时间依赖ROC、DCA、校准曲线一条龙临床预测模型是很多晋升、毕业和课题结题绕不开的硬指标。以前要跑Cox回归、画列线图&#xff08;nomogram&#xff09;、出K-M生存曲线、做单因素和多因素分析、再补时间…

作者头像 李华
网站建设 2026/8/31 15:16:45

京东数据分析笔试全解析:SQL、AB实验与业务案例备考指南

开始之前&#xff0c;先说说这份试卷为什么值得翻出来看看 2019年京东春季校招的数据分析岗试卷&#xff0c;放在今天回头看&#xff0c;依然有很强的参考价值。不是说题目有多新&#xff0c;恰恰相反&#xff0c;它考察的东西——SQL取数、指标拆解、业务归因、AB实验设计——…

作者头像 李华
网站建设 2026/8/31 15:16:40

改进YOLOv8与DeepSeek微调:智能交通监控与问答系统实战

简介&#xff1a;本资源是一套面向计算机科学与技术专业本科生的智能交通系统综合实践方案&#xff0c;适用于毕业设计、课程设计及AI项目实战学习&#xff0c;聚焦交通场景下的目标检测与自然语言交互双重任务。压缩包共50个文件&#xff0c;含9个核心Python脚本&#xff08;如…

作者头像 李华
网站建设 2026/8/31 15:16:15

16QAM+LDPC+FFT频偏估计:Matlab通信链路仿真与误码率分析

简介&#xff1a;本资源是一套面向通信工程专业高年级本科生及研究生的MATLAB通信系统仿真完整实现&#xff0c;聚焦16QAM软解调、LDPC编译码与FFT频偏估计三大关键技术环节&#xff0c;解决实际无线传输中频偏失步与信道误码联合建模难的问题。压缩包共14个文件&#xff08;9个…

作者头像 李华
网站建设 2026/8/31 15:15:26

HTTP协议基础知识梳理、实现与简单应用

HTTP基础知识 一、网址的构成 1.协议 告诉浏览器用户用什么规则访问。 2.域名 域名通过域名解析转变为ip地址&#xff0c;对于对外提供服务的Web服务器默认使用80&#xff08;HTTP&#xff09;和443&#xff08;HTTPS&#xff09;端口&#xff0c;如果没写端口号&#xff0c…

作者头像 李华