网页CAD开发快速入门

news2025/6/3 23:20:44

演示说明

提示:目前提供两种在网页中浏览编辑CAD图纸方案,详细说明见:MxDraw帮助

网页中打开CAD最简步骤:

第一步: 安装插件运行环境,下载安装(可能需要退杀毒软件):https://demo.mxdraw3d.com:3562/MxDrawx86Setup.exe

第二步: 运行用ie,或安装指定Chrome内核浏览器: 下载:https://demo.mxdraw3d.com:3562/sogou_explorer_11.0.1_0722.exe

第三步:打开下面连接,在线查看CAD

梦想CAD网页版在线演示例子1: 梦想MxDrawX ActiveX 5.2 演示

梦想CAD网页版在线演示例子2: 点击此处在线演示

梦想CAD网页版最简代码例子3: MxDraw控件

梦想CAD网页版最简Vue代码例子4: https://demo.mxdraw3d.com:3562/my-vue.7z

国产浏览器如果不能加载,选择兼容模式,如下图:

在网页中使用Html + JavaScript调用控件,浏览和编辑CAD图纸,后台服务器使用Asp、php、java等语言都可以开发,服务器可以是windows、linux系统,,支持IE所有版本、QQ、360、谷歌等浏览器,极速模式也支持。

我们提供的是CAB安装包,在IE中自动下载安装。

如果需要Chrome加CAD控件,需要指定Chrome安装包,建使用下面的浏览器安装,使用极速模式加载。下载地址:

https://demo.mxdraw3d.com:3562/sogou_explorer_11.0.1_0722.exe

在网页中引用控件

从我们网站首页下载 最新安装包,安装包大概有150M,是个rar自解压文件,里面包括了所有帮助文件、和所有语言调用的运行例子,最终用户使用发布包只有16M。界面如下:

下载CAD控件开发包,下载成功后安装文件如下:

下载的文件是一个压缩文件,双击解压之后,以管理员身份运行“ RegMxDrawX.bat  ”注册CAD控件到系统中,如果注册失败请退出360等杀毒软件,再运行RegMxDrawX.bat。界面如下:

控件注册成功后,会弹出注册成功弹框。界面如下:

控件是个ocx,Id为 74A777F8-7A8F-4e7c-AF47-7074828086E2  

Html中引用控件需要添加代码如下:

 
<SCRIPT language="JavaScript">
document.oncontextmenu = new Function('event.returnValue=false;'); //禁用右键
function LoadMxDrawX(id,dwgfile,cabpath,msipath) {
var s, classid, Sys = {}, ua = navigator.userAgent.toLowerCase();
(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/trident\/([\d.]+)/)) ? Sys.ie9 = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0,
classid = "74A777F8-7A8F-4e7c-AF47-7074828086E2",
Sys.ie || Sys.ie9 ? (document.write("<!-- 用来产生编辑状态的ActiveX控件的JS脚本--> "),
document.write("<!-- 因为微软的ActiveX新机制,需要一个外部引入的js--> "),
document.write('<object id="'+ id + '" classid="clsid:' + classid + '" '),
//document.write('width="85%" height="85%" align="left"> '),
document.write('codebase=" ' + cabpath + 'width="85%" height="85%" align="left"> '),
document.write('<param name="_Version" value="65536"> '),
document.write('<param name="_ExtentX" value="24262"> '),
document.write('<param name="_ExtentY" value="16219"> '),
document.write('<param name="_StockProps" value="0">'),
document.write('<param name="DwgFilePath" value="' + dwgfile + '" > '),
document.write('<param name="IsRuningAtIE" value="1">'),
document.write('<param name="EnablePrintCmd" value="1"> '),
document.write('<param name="ShowCommandWindow" value="1"> '),
document.write('<param name="ShowToolBars" value="1"> '),
document.write('<param name="ShowModelBar" value="1">'),
document.write('<param name="Iniset" value=""> '),
document.write('<param name="ToolBarFiles" value="">'),
document.write('<param name="ShowMenuBar" value="1">'),
document.write('<param name="EnableUndo" value="1">'),
document.write('<param name="ShowPropertyWindow" value="1">'),
document.write('<SPAN STYLE="color:red">不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。请点击<a href=' + msipath + '>安装控件</a></SPAN>'),
document.write('</object>')) :
Sys.chrome ? (document.write('<object id="' + id + '" clsid="{' + classid + '}" '),
document.write('type="application/mxdraw-activex" width="85%" height="85%" align="left"> '),
document.write('<param name="_Version" value="65536"> '),
document.write('<param name="_ExtentX" value="24262"> '),
document.write('<param name="_ExtentY" value="16219"> '),
document.write('<param name="_StockProps" value="0">'),
document.write('<param name="DwgFilePath" value="' + dwgfile + '" > '),
document.write('<param name="IsRuningAtIE" value="1">'),
document.write('<param name="EnablePrintCmd" value="1"> '),
document.write('<param name="ShowCommandWindow" value="1"> '),
document.write('<param name="ShowToolBars" value="1"> '),
document.write('<param name="ShowModelBar" value="1">'),
document.write('<param name="Iniset" value=""> '),
document.write('<param name="ToolBarFiles" value="">'),
document.write('<param name="ShowMenuBar" value="1">'),
document.write('<param name="EnableUndo" value="1">'),
document.write('<param name="ShowPropertyWindow" value="1">'),
document.write('<param name="Event_ImplementCommandEvent" value="DoCommandEventFunc">'),
document.write('<SPAN STYLE="color:red">不能装载文档控件,谷歌浏览器使用,下载MxChrome安装包到本地,安装后点击桌面 Chrome企业版 快捷方式启动。请点击<a href=' + msipath + '>安装控件</a></SPAN>'),
document.write('</object>')) :
Sys.firefox ? (document.write("<!-- 需要安装ieTab插件才能使用--> "),
document.write("<!-- 右键弹出菜单,点击使用ieTab浏览> --> "),
document.write('<div class="no_title"> 不能装载文档控件。1.请在安装ieTab插件,2.然后请点击<a href=' + msipath + '>安装控件</a>, 3.然后右键弹出菜单,点击使用ieTab浏览 </div> ')
) :
Sys.opera ? alert("sorry,ntko 暂时不支持opera!") :
Sys.safari && alert("sorry,ntko 暂时不支持safari!");
}
function isFireFox()
{
var s, classid, Sys = {}, ua = navigator.userAgent.toLowerCase();
(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/trident\/([\d.]+)/)) ? Sys.ie9 = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
return Sys.firefox;
}
</SCRIPT>

使用参考例子 samples\ie  引用CAD控件添加代码如下:

 
<script type="text/javascript"> LoadMxDrawX("MxDrawXCtrl", "", "http://www.mxdraw.com/MxDrawX52.CAB#version=8.0.0.1", "https://download.mxdraw3d.com:2083/MxChromex86Setup.exe");</script>
<script>

标记中各个部分的含义如下:

id=" MxDrawXCtrl "标识控件的JavaScript编程标识,通过document.all("MxDrawXCtrl ")即可得到对控件对象的引用。

clsid:  74A777F8-7A8F-4e7c-AF47-7074828086E2  标识控件的唯一标识。浏览器通过这个clsid来判断访问网页的客户机是否已经安装控件。

codebase="https://demo.mxdraw3d.com:3562/MxDrawX52.CAB#version=4.0.0.1"

在网页上自动安装CAB包,https://demo.mxdraw3d.com:3562/MxDrawX52.CAB是CAB包在服务器上的位置。version=4.0.0.1是控件版本号,如果这个版本号取的比文件属性中版本号低,则不会在ie中自动下载提示更新安装,如果比文件属性中的版本号高,则会总是提示更新安装。

这个版本号可以查看 mxdrawx.ocx  文件的属性得到,最新版已经升级到version=9.0.0.1,界面如下:

参考例子目录:

src\MxDraw5.2\sample\ie

src\MxDraw5.2\sample\ie\iedemoTest.htm

src\MxDraw5.2\sample\JavaScript

梦想MxDrawX ActiveX 5.2 演示

Asp.net调用控件

“参考例子” sample\AspNet\AspNet.sln ”,演示了网页调用控件、打开图纸、保存图纸到服务器、参数化绘图、交互绘图等功能。运行效果如下:

打开服务器上的dwg文件

1.1 修改服务器设置,支持dwg文件下载

打开IIS的设置界面,在网站上面点击右键,弹出菜单,选择“ 属性 ”菜单命令。弹出网站设置界面,点击“HTTP头  ”的Tab选项。界面如下:

点击“ 文件类型 ”按钮,弹出设置界面,增加一个新的dwg文件类型,点击确定。界面如下:

新版本IIS设置设置,支持dwg文件下载

运行ISS管理器点击网站对象,点击 Default Web Site  ,界面如下:

点击“ MIME类型  ”按钮,界面如下:

点击右边界面中的“ 添加  ”按钮,添加文件扩展名为.dwg,界面如下:

点击“ 确定”后,列表中出现如下字符则表示添加成功,界面如下:

1.2 DwgFilePath

控件自动打开DWG文件的属性,在控件的属性窗口中设置该值为dwg文件的路径,控件打开时自动打开dwg文件,网页调用代码:

<param name="DwgFilePath" value="https://download.mxdraw3d.com:2083/test.dwg" >

在网中调用时该变量支持相对路径。 相对服务器路径:  DwgFilePath=~/my.dwg ,相对当前网页路径 DwgFilePath=./my.dwg  。该变量支持ftp路径 DwgFilePath=ftp://192.168.1.133/11.dwg 。支持assic字符串的十六进制编码,用"<>"扩起来的路径,控件就认为这是十六进制编码 如:传 <2E2F33343234332E647767>表示传 ./34243.dwg。

1.3 OpenWebDwgFile

调用这个函数,直接打开网上的DWG ,DXF, DWF文件。网络路径如:https://demo.mxdraw3d.com:3562/test.dwg

支持assic字符串的十六进制编码,用"<>"扩起来的路径,控件就认为这是十六进制编码 如可以传 <2E2F33343234332E647767>表示传 ./34243.dwg。在网页中,需要等到控件初始化完成后,才能调用该函数打开dwg文件。

在网页增加控件初始化完成函数如下:

 
//初始化
function InitMxDrawX() {
var mxOcx = document.getElementById("MxDrawXCtrl");
    if (mxOcx) {
        if (!mxOcx.IsIniting()) 
        {
            clearInterval(mxtime);
            // 控件初始化完成,需要在启动做的事,在这里做
            // 启动时打开文件
            mxOcx.OpenWebDwgFile("https://download.mxdraw3d.com:2083/test.dwg");
           
        }
    }
}
mxtime = setInterval(InitMxDrawX, 100);

保存dwg到服务器

控件支持在网页中绘图,编辑dwg文件,并把修改后的dwg文件保存到服务器。

SaveDwgToURL

该函数模拟一个文件表单提交,上传文件,在服务器端有个专门的程序来处理文件的上传。

COM接口:

 
VARIANT_BOOL SaveDwgToURL(
BSTR pszServerUrl, //服务器网址地址,如:www.mxdraw.com,如果传空,程序自动取当前网
//页的服务器.
BSTR pszServerProgramUrl, //服务器的文件上传处理程序,如:upload.asp
BSTR pszComponentName, //HTML组件名称,相当于一个HTML页面的Form中的中的file1
BSTR pszPort); //服务处理端口. 如:_T("80")

详细例程参考  sample/AspNet 中"保存dwg文件到服务器"按钮,向服务器发送的上传文件请求,使用 Fiddler 工具能看见上传数据包, 因为Fiddler的问题, Fiddler工具查看本地服务器请求内容时,本地服务器ip地址需要写成http://127.0.0.1,而不能写成  http://localhost 。

如下代码调用:

 
if (!mxOcx.SaveDwgToURL("http://127.0.0.1.", "/Save.aspx", "ComponentName", "6046")) {
// 得到服务器返回错误
var ret = MxDrawXCtrl_Obj.Call("Mx_GetLastError","");
alert(ret.AtString(0));
}
else {
alert("成功");
}

上面代码相当于如下Html代码的调用:

 
<form action="Save.aspx"method="post" enctype="multipart/form-data">
<input id="File1" type="file" name="ComponentName" /><br />
<input id="Submit1" type="submit" value="submit" />
</form>

服务器上,接收上传文件并保存的代码,Asp.net:

 
namespace AspNet
{
public partial class Save : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Web.HttpFileCollection uploadFiles = Request.Files;
System.Web.HttpPostedFile theFile;
if (uploadFiles.Count == 0)
{
Response.Write("Save failed!!!");
return;
}
else
{
try
{
int i = 0;
for (; i < uploadFiles.Count; )
{
theFile = uploadFiles[i];
// uploadFiles.GetKey(0)对应着
// SaveDwgToURL(getcurpath(), "/Save.aspx", "test.dwg","");中的Test.Dwg
theFile.SaveAs(Server.MapPath(uploadFiles.GetKey(0)) );
Response.Write("Save OK!");
i++;
return;
}
}
finally
{
}
}
Response.Write("Save failed!!!");
}
}
}

例如 ASP.net + MVC调用:

 
var dwgName = $("#dwgList option:selected").text();
var hostName = window.location.hostname;
var port = window.location.port;
var path = "http://" + hostName + ":" + port;
alert(hostName+"==="+path);
if (!mxOcx.SaveDwgToURL(path, "Home/SaveDwgFile/?key=" + Math.random() + "&flag=" + flag, dwgName, ""))
{
alert(path);
var ret = mxOcx.Call("Mx_GetLastError", "");
alert(ret.AtString(1));
}
else
{
//alert("保存成功");
}

服务器上,接收上传文件并保存的代码Servlet:

 
MxForm mf = (MxForm)actionForm;
InputStream is = mf.getFile().getInputStream();
File destFile = new File("D:\civilize\code\web","test.dwg");
OutputStream os = new FileOutputStream( destFile );
byte[] buffer = new byte[400];
int length = 0;
while( (length = is.read(buffer)) > 0 ) {
os.write(buffer,0,length);
}
mf.getFile().destroy();
is.close();
os.close();
return null;
// MxForm代码:
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
public class MxForm extends ActionForm {
private FormFile file;
public FormFile getFile() {
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
}

设置服务器上目录权限

控件中的ASP例程,上传保存的文件放在updata目录下,在服务器上必须设置其写权限,才能保存成功。设置步骤如下:

1.打我的“电脑窗口”,点击“ 工具 ”->“ 文件夹选项 ”,弹出文件夹选项窗口。

2.勾选“ 使用共享向导”选项,界面如下:

网页交互绘直线

放入一个绘直线按钮:

<input type="button" value="绘制直线" οnclick="myclick()">

Myclick函数代码:所有与用户交互的函数,需要在控件的命令事件中调用,具体原因参考文档“ 梦想控件19-命令执行原理.doc ”

 
function myclick()
{
// 下面的DoCommand(1)调用程序将跳到DoCommandEventFunc(iCmd)执行
document.getElementById("MxDrawXCtrl").DoCommand(1);
}
定义一个控件命令执行函数:
function DoCommandEventFunc(iCmd)
{
if (iCmd == 1)
{
// 绘直线代码
var mxOcx = document.all.item("MxDrawXCtrl");
mxOcx.focus();
// 与用户交互,在图上点取一个点
var point1 = mxOcx.GetPoint(false,0,0,"\n 点取开始点:");
if(point1 == null)
{
return;
}
// 与用户交互,在图上点取第二点
var point2 = mxOcx.GetPoint(true,point1.x,point1.y,"\n 点取结束点:");
if(point1 == null)
{
return;
}
// 开始画直线的,返回id
var lineId = mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y);
}
}

设置命令执行函数到控件属性如下:

 
document.getElementById("MxDrawXCtrl").ImplementCommandEventFun =
DoCommandEventFunc;

例子完整代码如下:

 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312;no-cache">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>MxDraw控件</title>
</head>
<body topmargin="0" leftmargin="0">
<p>
<input type="button" value="绘制直线" οnclick="myclick()">
</p>
<p align="center">
<object classid="clsid:74A777F8-7A8F-4e7c-AF47-7074828086E2" id="MxDrawXCtrl" codebase="http://www.mxdraw.com/MxDrawX52.CAB#version=7.0.0.1" width=100% height=90%>
<param name="_Version" value="65536">
<param name="_ExtentX" value="24262">
<param name="_ExtentY" value="16219">
<param name="_StockProps" value="0">
<param name="IsRuningAtIE" value="1">
<param name="EnablePrintCmd" value="1">
<param name="ShowStatusBar" value="1">
<param name="ShowMenuBar" value="1">
<param name="ShowToolBars" value="1">
<param name="ShowCommandWindow" value="1">
<param name="ShowModelBar" value="1">
<param name="Iniset" value="AutoActive=N,LoadMrx=PropertyEditor">
<param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt">
<SPAN STYLE="color:red">不能装载CAD控件。请确认你可以连接网络或者检查浏览器的选项中安全设置。<a href="http://www.mxdraw.com/MxDrawX52.msi">http://www.mxdraw.com/MxDrawX52.msi 安载CAD控件</a></SPAN>
</object>
<script>
function myclick()
{
// 下面的DoCommand(1)调用程序将跳到DoCommandEventFunc(iCmd)执行
document.getElementById("MxDrawXCtrl").DoCommand(1);
}
function DoCommandEventFunc(iCmd)
{
if (iCmd == 1)
{
var mxOcx = document.all.item("MxDrawXCtrl");
mxOcx.focus();
var point1 = mxOcx.GetPoint(false,0,0,"\n 点取开始点:");
if(point1 == null)
{
return;
}
var point2 = mxOcx.GetPoint(true,point1.x,point1.y,"\n 点取结束点:");
if(point1 == null)
{
return;
}
// 直线的id
var lineId = mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y);
// 为新写的直线写一个字符串扩展数据
var database = mxOcx.GetDatabase();
var ent = database.ObjectIdToObject(lineId);
}
}
document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;
</script>
</p>
</html>

chrome浏览器运行控件

CAD控件是ocx插件,但最新谷歌浏览器已经不再支持NPAPI插件,好在谷歌浏览器是开源项目,我们修改了它的源码,并让它支持我们的ocx插件,我们把修改过的谷歌浏览器取名为“Chrome企业版”。

下载谷歌浏览器32位企业版:https://demo.mxdraw3d.com:3562/MxChromex86Setup.exe

也建议使用国产浏览的极速模式加载我们CAD控件,效果也不错

下载支持CAD插件的搜狗浏览:https://demo.mxdraw3d.com:3562/sogou_explorer_11.0.1_0722.exe

运行效果如下:

安装程序会自动安装运行控件需要的所有环境,该安装包可以直接发给最终用户使用,也不需要再单独安装chrome浏览器。

安装后,运行桌面快捷方式"Chrome企业版"

.

chrome浏览器使用控件效果:

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

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

相关文章

Python语言零基础入门教程(十一)

Python 列表(List) 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置&#xff0c;或索引&#xff0c;第一个索引是0&#xff0c;第二个索引是1&#xff0c;依此类推。 Python有6个序列的内置类型&#xff0c;但最常见的是列表和元组。 序列都可以…

springboot 关闭所有日志,包括起始springboot图标和运行输入日志

关闭所有日志分2部分: 1 关闭运行输出日志 , 2 关闭springboot启动图标 1 关闭运行输出日志 (这里没有使用日志框架设置日志) 在 application.properties 中 添加 logging.level.你自己项目的包名off例如&#xff1a;logging.level.com.example.licenseoff 注&#xff1a;of…

leetcode 2306. Naming a Company(命名公司)

字符串ideas中有一系列的名字&#xff0c;用这些名字给公司命名&#xff0c;命名规则如下&#xff1a; 在ideas中选出2个不同的单词&#xff0c;交换它们的首字母&#xff0c; 交换首字母后的两个单词如果不和ideas中的任一单词相同&#xff0c;那么就可以用它们命名&#xff0…

Vue - 驼峰和短横线分割命名注意事项

Vue - 驼峰和短横线分割命名注意事项一. 驼峰和短横线分割命名注意事项1.1 组件注册命名1.2 父子组件数据传递时命名1.3 父子组件函数传递一. 驼峰和短横线分割命名注意事项 我们一般定义组件的方式有两种&#xff1a; 短横线分隔命名&#xff1a;kebab-case。首字母大写命名…

【实际开发17】- 静态测试

静态测试技术&#xff1a;不运行被测试程序&#xff0c;对代码通过检查、阅读进行分析。 目录 1. 静态测试 1. 静态测试三步曲 : 走查 / 审查 / 评审 2. 编码的标准和规范 3. 代码评审 1. 代码走查 ( Walk Through ) 2. 正式会议审查 ( Inspection ) 3. 评审 ( Review )…

QThread(创建线程)

在Qt 中QThread 类提供了于平台无关的线程&#xff0c;一个QThread代表一个在应用程序中可以独立控制的线程&#xff0c;可以和进程中的其他线程分享数据。 QThread 对象管理程序中的一个控制线程。QThreads 在 run&#xff08;&#xff09; 中开始执行。默认情况下&#xff0…

C语言进阶——自定义类型:结构体

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;生活不可能像你想象的那么好&#xff0c;也不会像你想象的那么糟。——莫泊桑《羊脂球》 目录 一、前言 二、正文 1结构体 1.1结构体的基础知识 1.2结构的声明 1.3特殊的声明 1.4结构体变量的…

若依框架---数据转树状层级

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Node=>Express路由 学习2

1.概念 Express路由指的是客户端的请求与服务器处理函数之间的映射关系 Express路由由三部分组成 请求类型 请求URL地址 处理函数 app.METHOD ( PATH , HANDLER )根据定义的先后顺序进行匹配 请求类型和请求的URl同时匹配成功才会调用相应的处理函数 简单用法 2.模块化路由 为了…

《里奥哈酒友记》 | 里奥哈的历史—品鉴瑞格尔侯爵葡萄酒

2022年末&#xff0c;里奥哈大使组合怪怪和思羽完成了里奥哈线上活动两大“壮举”&#xff0c;10期《里奥哈酒友记》系列视频和40集《美酒之乡——里奥哈》有声专辑&#xff0c;吸引了许多葡萄酒资深爱好者的目光&#xff0c;也成功地让更多的人了解到里奥哈。由里奥哈推广大使…

粘包拆包问题

什么是粘包/拆包 TCP是个“流”式的协议&#xff0c;会根据TCP缓冲区的实际情况进行包的划分。在业务层面认为一个完整的包&#xff0c;可能会被TCP拆分成多个小包进行发送&#xff0c;也可能把多个小的包封装成一个大的数据包进行发送 粘包拆包问题解决方法 由于TCP协议底层…

电脑分盘怎么分?分盘详细教程来了,图文教学

电脑作为小伙伴日常生活使用的工具&#xff0c;很多事情都需要使用电脑来进行处理。虽然小伙伴使用电脑比较多&#xff0c;但是还是有不少的小伙伴不知道电脑分盘怎么分&#xff1f;其实电脑分盘很简单&#xff0c;下面小编就以图文教学的方式&#xff0c;详细的向小伙伴介绍电…

Python:迷宫

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 X 星球的一处迷宫游乐场建在某个小山坡上。它是由 1010 相互连通的小房间组成的。 房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立&#xff0…

【Linux系统编程】01:命令行解析

命令行解析 1.getopt调用介绍 头文件&#xff1a;<unistd.h> 原型&#xff1a;int getopt(int argc, char * const argv[], const char *optstring); argc、argv&#xff1a;由main函数的参数直接传递而来optstring&#xff1a;一个包含所有合法可选字符组成的字符串 …

超高精度PID调节器的特殊功能(3)——变送输出(转发)功能及其应用

摘要&#xff1a;变送输出是高级PID控制器的一项重要扩展功能&#xff0c;可用于多区控制、串级控制、比值控制和差值控制以及数据采集及记录。为展示变送输出功能的强大作用&#xff0c;本文主要针对超高精度VPC 2021系列PID控制器&#xff0c;介绍了变送输出的具体功能、参数…

【FPGA】Verilog:组合电路 | 3—8译码器 | 编码器 | 74LS148

前言&#xff1a;本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例&#xff1a;编码/译码器的应用 ​ 功能特性&#xff1a; 采用 Xilinx Artix-7 XC7A35T芯片 配置方式&#xff1a;USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度 存储器&…

部门新来了个软件测试工程师,看着一副毛头小子的样儿,哪想到是新一代卷王...

内卷&#xff0c;是现在热度非常高的一个词汇&#xff0c;随着热度不断攀升&#xff0c;隐隐到了“万物皆可卷”的程度。 在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不…

【精彩点评】正确理解区块链能源消耗的内涵以及对绿色区块链的探索

发表时间&#xff1a;2022年4月13日 信息来源&#xff1a;bsvblockchain.org 为了理解区块链技术的工作原理并确定如何更好地对其加以利用&#xff0c;就区块链技术提出疑问是不可避免的。也许你正在被区块链的能源效率这个问题所困扰。 经常有人说&#xff0c;一些区块链网络…

Spring MVC 之获取参数(对象、JSON格式数据、URL地址参数、文件、Cookie)

文章目录1. 获取单个参数2. 获取多个参数3. 获取对象4. 后端参数重命名 RequestParam5. 接收 JSON 格式的数据 RequestBody6. 从 URL 地址中获取参数 PathVariable7. 上传文件 RequestPart8. 获取Cookie (CookieValue)/Session/header8.1 获取 Request 和 Response 对象8.2 获取…

【GD32F427开发板试用】SysTick定时器的ms中断,us计时

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;远小刘 1、系统滴答定时器 参考资料《Cortex M3与M4权威指南.pdf》中的9.5 The SysTick timer小节&#xff0c;里面详细讲解了 1、为什么要用…