WEB浏览器轻松读写NDEF智能海报、地图坐标、文本标签信息

本示例使用的发卡器:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>网页轻松读写NDEF标签</title><script language="javascript">var iswsrun = false;var ws;var received_msg = "";var mytimer;var strls = "";var errorno = "";var wsUri = "ws://127.0.0.1:39189";   //端口号必须与RFIDWebServer端口一致function beep() {				 //驱动发卡器响声buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";		WebSocketRun("pcdbeep,30");					}function MapCoordinate(){		//申请写入NDEF地图坐标buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";address=map_add.value;		        //地址latitude=map_latitude.value;		//纬度longitude=map_longitude.value;		//经度WebSocketRun("NDEF_Map_coordinates,"+address+","+latitude+","+longitude);			}function CallingTelephone(){	//写入呼叫电话buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";TeleNum=callnum.value;      //呼叫的电话号码WebSocketRun("NDEF_Call_Telephone,"+TeleNum);}function SmartPoster(){		//写智能海报buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";titlestr=title.value;					//标题uriheader=String(prefix.selectedIndex);	//前缀uriinfo=uristr.value;					//uri链接Sendinfstr ="NDEF_SmartPoster,"+titlestr+","+uriheader+","+uriinfo;			WebSocketRun(Sendinfstr);}function AddBluetooth(){			//写蓝牙设备连接控制标签buttonDisable();	// 删除 onclick 属性,防止重复执行指令							text.value = "";blenamestr=Devicename.value;  //蓝牙设备名称blemacstr=macstr.value;       //设备MAC地址WebSocketRun("NDEF_AddBluetooth,"+blenamestr+","+blemacstr);}function AddWifi(){  			//写WIFI无线热点连接控制标签buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";ssidstr=ssidname.value;		//wifi热点名称authtype=String(authen.selectedIndex);	//认证方式crypttype=String(algorithm.selectedIndex);	//加密算法keystr=passw.value;	//wifi密码WebSocketRun("NDEF_AddWifi,"+ssidstr+","+authtype+","+crypttype+","+keystr);}function AddBusinessCard(){		//写电子名片buttonDisable();	// 删除 onclick 属性,防止重复执行指令					text.value = "";infostr= "BEGIN:VCARD"+","; infostr = infostr + "VERSION:3.0" + ",";infostr = infostr + "FN:" +namestr.value  + ",";    //姓名infostr = infostr + "TEL:" + telstr.value + ",";    //电话infostr = infostr + "ORG:" + groupstr.value + ",";  //单位名称infostr = infostr + "ADR:" + addstr.value  +",";    //地址infostr = infostr + "EMAIL:" + emailstr.value  +",";//邮箱infostr = infostr + "URL:" + urlstr.value + ",";    //官网infostr = infostr + "END:VCARD" ;WebSocketRun("NDEF_AddBusinessCard,"+infostr);}function AddApp(){		//写启动APP应用程序控制标签buttonDisable();	// 删除 onclick 属性,防止重复执行指令						text.value = "";packagestr=appname.value;   //要启动的APP名称WebSocketRun("NDEF_AddApp,"+packagestr);}function AddData(){		//写数据类型标签buttonDisable();	// 删除 onclick 属性,防止重复执行指令							text.value = "";ndeftypestr=datatype.value;		//数据类型名称ndefdatastr=datastr.value;      //数据WebSocketRun("NDEF_AddData,"+ndeftypestr+","+ndefdatastr); }function AddText(){		//写纯文本标签buttonDisable();	// 删除 onclick 属性,防止重复执行指令								text.value = "";ndeftextstr=text5.value;		//文本信息			WebSocketRun("NDEF_AddText,"+ndeftextstr); 	}function ClearNdef(){buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";WebSocketRun("NDEF_Clear,"); 	}function ReadNdef(){				buttonDisable();	// 删除 onclick 属性,防止重复执行指令				text.value = "";readinfo.value="";WebSocketRun("NDEF_ReadInfo,"); 	}function SelectApp(){switch(qz4.selectedIndex){case 0:appname.value="com.tencent.mobileqq";break;case 1:appname.value="com.android.mms";break;case 2:appname.value="com.android.camera";break;case 3:appname.value="com.tencent.mm";break;case 4:appname.value="com.alibaba.android.rimet";break;case 5:appname.value="com.taobao.taobao";break;case 6:appname.value="com.taobao.qianniu";break;case 7:appname.value="com.fcbox.hiveconsumer";break;case 8:appname.value="com.eg.android.AlipayGphone";break;case 9:appname.value="com.android.contacts";break;case 10:appname.value="com.baidu.BaiduMap";break;case 11:appname.value="com.kugou.android";break;				case 12:appname.value="com.cebbank.mobile.cemb";break;case 13:appname.value="com.netease.newsreader.activity";break;case 14:appname.value="com.icbc";break;																											}}function buttonDisable(){document.getElementById("butt_beep").onclick = null;		document.getElementById("butt_map").onclick = null;	document.getElementById("butt_call").onclick = null;document.getElementById("butt_smart").onclick = null;document.getElementById("butt_blue").onclick = null;document.getElementById("butt_wifi").onclick = null;document.getElementById("butt_card").onclick = null;document.getElementById("butt_app").onclick = null;document.getElementById("butt_data").onclick = null;document.getElementById("butt_text").onclick = null;document.getElementById("butt_clear").onclick = null;document.getElementById("butt_read").onclick = null;}function buttonEn(){  //恢复各button 的onclick事件document.getElementById("butt_beep").setAttribute("onclick", "beep()");			document.getElementById("butt_map").setAttribute("onclick", "MapCoordinate()");		document.getElementById("butt_call").setAttribute("onclick", "CallingTelephone()");document.getElementById("butt_smart").setAttribute("onclick", "SmartPoster()");	document.getElementById("butt_blue").setAttribute("onclick", "AddBluetooth()");document.getElementById("butt_wifi").setAttribute("onclick", "AddWifi()");document.getElementById("butt_card").setAttribute("onclick", "AddBusinessCard()");document.getElementById("butt_app").setAttribute("onclick", "AddApp()");document.getElementById("butt_data").setAttribute("onclick", "AddData()");document.getElementById("butt_text").setAttribute("onclick", "AddText()");document.getElementById("butt_clear").setAttribute("onclick", "ClearNdef()");document.getElementById("butt_read").setAttribute("onclick", "ReadNdef()");}function DispErrInfo(Errcode){var errstr = "";switch (Errcode) {case "ReturnCode:001":				errstr = ",读写扇区数据失败!";break;case "ReturnCode:002":errstr = ",读写1、2块数据失败!";break;case "ReturnCode:003":errstr = ",读写第2块数据失败!";break;case "ReturnCode:008":errstr = ",未寻到卡,请将卡放到发卡器的感应区!";break;case "ReturnCode:009":errstr = ",有多张卡在感应区,寻卡过程中防冲突失败,读卡失败!";break;case "ReturnCode:010":errstr = ",该卡可能已被休眠,无法选中卡片!";break;case "ReturnCode:011":errstr = ",密码装载失败!";break;case "ReturnCode:012":errstr = ",卡密码认证失败!";break;case "ReturnCode:013":errstr = ",读块操作失败,原因是刷卡太快或本块所对应的区还没通过密码认证!";break;case "ReturnCode:014":errstr = ",写块操作失败,原因是刷卡太快或本块所对应的区还没通过密码认证!";break;case "ReturnCode:018":errstr = ",写块操作失败!";break;case "ReturnCode:021":errstr = ",没有动态库!";break;case "ReturnCode:022":errstr = ",动态库或驱动程序异常!";break;case "ReturnCode:023":errstr = ",驱动程序错误或发卡器未连接!";break;case "ReturnCode:024":errstr = ",操作超时,一般是动态库没有反映!";break;case "ReturnCode:025":errstr = ",发送字数不够!";break;case "ReturnCode:026":errstr = ",发送的CRC错!";break;case "ReturnCode:027":errstr = ",接收的字数不够!";break;case "ReturnCode:028":errstr = ",接收的CRC错!";break;case "ReturnCode:029":errstr = ",函数输入参数格式错误!";break;case "ReturnCode:045":errstr = ",此卡不支持更改UID号或UID块已被锁定!";break;case "ReturnCode:046":errstr = ",信息过大,标签容量不足!";break;case "ReturnCode:057":errstr = ",卡片不支持Forum_Type4协议,可能不是Forum_Type4_Tag卡!";break;case "ReturnCode:444":errstr = ",RFIDWebServer系统文件错误!";break;case "ReturnCode:555":errstr = ",未发现有效的NFC标签!";break;					default:errstr = ",未知的错误!";}return errstr;}window.onerror = function (e) {alert("不好意思,出错了!");return true;//屏蔽系统事件}function timeoutevent() {ws.close();CardIDShowerdev.value = "websockket返回超时";			}//websockket数据处理function WebSocketRev(evt) {			clearTimeout(mytimer);received_msg = evt.data;ws.close();//在这里解析返回数据			            		var strlist = received_msg.split(",");if (strlist.length > 1) {var dispstr = "";switch (strlist[0]) {case "pcdbeep":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr + "操作结果:" + strlist[1]+ ",已执行蜂鸣响声操作!\r\n"} else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;break;case "NDEF_Map_coordinates":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写NDEF地图坐标标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;break;	case "NDEF_Call_Telephone":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写NDEF呼叫电话标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;	case "NDEF_SmartPoster":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写NDEF智能海报标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;		case "NDEF_AddBluetooth":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写蓝牙连接NDEF控制标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;	case "NDEF_AddWifi":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写WIFI无线连接NDEF控制标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;		case "NDEF_AddBusinessCard":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写NDEF电子名片标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;		case "NDEF_AddApp":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写启动APP程序NDEF控制标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;		case "NDEF_AddData":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写NDEF数据标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;	case "NDEF_AddText":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",写NDEF文本标签成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;							case "NDEF_Clear":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",清除NDEF标签信息成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;						break;	case "NDEF_ReadInfo":dispstr = "函数名称:" + strlist[0] + "\r\n";if (strlist[1] == "ReturnCode:000") {dispstr = dispstr +"操作结果:" + strlist[1]+ ",读取NDEF标签信息成功!\r\n";dispstr = dispstr +"标签类型:"+strlist[2]+ "\r\n";;dispstr = dispstr +"标签号码:"+strlist[3];}else {dispstr = dispstr + "操作结果:" + strlist[1]+ DispErrInfo(strlist[1]);}text.value = dispstr;	var ndefstr="";for(var i=4;i<strlist.length;i++){ndefstr=ndefstr+strlist[i];if(i<strlist.length-1){ndefstr=ndefstr+",";}}readinfo.value=	ndefstr;				break;																								}} buttonEn();  //恢复按键的onclick事件}function WebSocketRun(sendinfo) {iswsrun = false;try {if ("WebSocket" in window) {ws = new WebSocket(wsUri);}else if ("MozWebSocket" in window) {ws = new MozWebSocket(wsUri);}else {received_msg = "您的浏览器不支持WebSocket,请选用支持WebSocket的浏览器!";return;}clearTimeout(mytimer);ws.onopen = function (evt) {ws.send(sendinfo);iswsrun = true;if (sendinfo=='NDEF_Clear,'){mytimer = setTimeout("timeoutevent()", 5000);	//清除标签的时间要长} else{ mytimer = setTimeout("timeoutevent()", 2000);}						};ws.onmessage = WebSocketRev;	ws.onerror = function (e) {if (iswsrun != true) {received_msg = "请先在当前电脑下载>安装>运行我们的服务程序......";window.open("http://www.icmcu.com/ICID15693-02V2test/RFIDWebServerSetup.exe", "top");//打开新窗口alert("请先下载>安装>运行我们的服务程序,再刷新本页面......");}};																}catch (ex) {if (iswsrun != true) {received_msg = "请先在当前电脑下载>安装>运行我们的服务程序......";window.open("http://www.icmcu.com/ICID15693-02V2test/RFIDWebServerSetup.exe", "top");//打开新窗口alert("请先下载>安装>运行我们的服务程序,再刷新本页面......");}}}</script><style type="text/css">
body,td,th {color: #000000;background-color: #FFF;
}
body {background-color: #FFF;background-image: none;
}
</style>
</head><body>
<table width="1107" border="1"><tr><th width="100" height="73" scope="row"><input type="submit" name="butt_beep" id="butt_beep" value="驱动发卡器响声" onclick="beep()" /></th><td width="1463"><textarea name="returninfo" id="text" cols="140" rows="5"></textarea></td></tr><tr><th height="36" scope="row"><input type="submit" name="butt_map" id="butt_map" value="写入地图坐标" onclick="MapCoordinate()"/></th><td>地址名称:<label for="map_add"></label><input name="map_add" type="text" id="map_add" value="北京天安门广场" />纬度:<label for="map_longitude"></label><input name="map_latitude" type="text" id="map_latitude" value="39.906922" />经度:<label for=""></label><input name="map_longitude" type="text" id="map_longitude" value="116.389027" /></td></tr><tr><th height="39" scope="row"><input type="submit" name="butt_call" id="butt_call" value="写入呼叫电话" onclick="CallingTelephone()"/></th><td>呼叫电话:<label for="callnum"></label><input name="callnum" type="text" id="callnum" value="13800138000" /></td></tr><tr><th height="37" scope="row"><input type="submit" name="butt_smart" id="butt_smart" value="写入智能海报" onclick="SmartPoster()"/></th><td>标题:<label for="title"></label><input name="title" type="text" id="title" value="百度" />前缀:<label for="prefix"></label><select name="prefix" size="1" id="prefix"><option>无前缀</option><option>http://www.</option><option selected="selected">https://www.</option><option>http://</option><option>https://</option><option>tel:</option><option>mailto:</option><option>ftp://anonymous:anonymous@</option></select><label for="uristr"></label>      <input name="uristr" type="text" id="uristr" value="baidu.com" size="65" />    </td></tr><tr><th height="40" scope="row"><input name="butt_blue" type="submit" id="butt_blue" onclick="AddBluetooth()" value="写入蓝牙连接" /></th><td>设备名称:<label for="Devicename"></label><input name="Devicename" type="text" id="Devicename" value="PC45" />蓝牙MAC地址:<label for="macstr"></label><input name="macstr" type="text" id="macstr" value="21:f4:76:78:3a:b6" /></td></tr><tr><th height="40" scope="row"><input name="butt_wifi" type="submit" id="butt_wifi" onclick="AddWifi()" value="写入WIFI连接" /></th><td>热点名称:<label for="ssidname"></label><input name="ssidname" type="text" id="ssidname" value="Xiaomi_E467" />认证方式:<select name="authen" size="1" id="authen"><option>无</option><option>WPA个人</option><option>SHARED</option><option>WPA企业</option><option>MIXED</option><option>WPA2企业</option><option>WPA2个人</option><option selected="selected">WPA+WPA2个人</option></select>加密算法:<select name="algorithm" size="1" id="algorithm"><option>无</option><option>WEP</option><option>TKIP</option><option>AES</option><option selected="selected">AES+TKIP</option></select>密码:<label for="passw"></label><input name="passw" type="text" id="passw" value="abcd#12345678." /></td></tr><tr><th height="60" scope="row"><input name="butt_card" type="submit" id="butt_card" onclick="AddBusinessCard()" value="写入电子名片" /></th><td><p>姓名:<label for="namestr"></label><input name="namestr" type="text" id="namestr" value="张三丰" />电话:<label for="telstr"></label><input name="telstr" type="text" id="telstr" value="13800138000" />公司名称:<label for="groupstr"><input name="groupstr" type="text" id="groupstr" value="广东省人民政府" />邮箱:</label><label for="emailstr"></label><input name="emailstr" type="text" id="emailstr" value="123456789@qq.com" /></p><p>网址:<label for="urlstr"></label><input name="urlstr" type="text" id="urlstr" value="http://www.gd.gov.cn/" />地址:<label for="addstr"></label><input name="addstr" type="text" id="addstr" value="广州市越秀区东风中路305号" size="90" /></p></td></tr><tr><th height="40" scope="row"><input name="butt_app" type="submit" id="butt_app" onclick="AddApp()" value="写入启动应用" /></th><td>App名称:<label for="appname"></label><input name="appname" type="text" id="appname" value="com.tencent.mm" />
<select name="qz4" size="1" id="qz4" onchange="SelectApp()"><option value="com.tencent.mobileqq">QQ</option><option value="com.android.mms">短信</option><option value="com.android.camera">相机</option><option value="com.tencent.mm" selected="selected">微信</option><option value="com.alibaba.android.rimet">钉钉</option><option value="com.taobao.taobao">淘宝</option><option value="com.taobao.qianniu">千牛</option><option value="com.fcbox.hiveconsumer">丰巢</option><option value="com.eg.android.AlipayGphone">支付宝</option><option value="com.android.contacts">通讯录</option><option value="com.baidu.BaiduMap">百度地图</option><option value="com.kugou.android">酷狗音乐</option><option value="com.cebbank.mobile.cemb">光大银行</option><option value="com.netease.newsreader.activity">网易新闻</option><option value="com.icbc">中国工商银行</option></select></td></tr><tr><th height="40" scope="row"><input name="butt_data" type="submit" id="butt_data" onclick="AddData()" value="写入数据类型" /></th><td>数据类型:<label for="datatype"></label><input name="datatype" type="text" id="datatype" value="text/plain" />数据:<label for="datastr"></label><input name="datastr" type="text" id="datastr" value="0123456789" size="90" /></td></tr><tr><th height="37" scope="row"><input name="butt_text" type="submit" id="butt_text" onclick="AddText()" value="写入NDEF文本" /></th><td><textarea name="textinfo" id="text5" cols="140" rows="3">轻轻的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。</textarea></td></tr><tr><th height="116" scope="row"><p><input name="butt_read" type="submit" id="butt_read" onclick="ReadNdef()" value="读取NDEF标签" /></p><p>&nbsp;      </p><p><input name="butt_clear" type="submit" id="butt_clear" onclick="ClearNdef()" value="清除NDEF标签" /></p></th><td><textarea name="readinfo" id="readinfo" cols="140" rows="8"></textarea></td></tr>
</table>
<p><label for="readinfo"></label><label for="title"></label>
</p>
</body>
</html></script>

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

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

相关文章

使用pikachu管理工具下的XSS后台进行实战

写在前面的重要提示&#xff1a; Attention&#xff1a;技术没有好坏之分&#xff0c;关键在于使用技术的人或组织。网络安全技术是一把双刃剑 – 作为网络安全人&#xff0c;虽然无法控制头上的帽子是否会变绿&#xff0c;但能控制不让它变黑&#xff1b;无论我们在物质上面对…

redis主从复制哨兵Cluster

目录 前言 一、模式介绍 1.1 主从复制 1.2 哨兵 1.3 集群 二、主从复制 2.1 主从复制的作用 2.2 主从复制流程 2.3 搭建Redis 主从复制 三、Redis 哨兵模式 3.1 哨兵模式原理 3.2 哨兵模式的作用 3.3 哨兵组成结构 3.4 哨兵故障转移机制 3.5 搭建Redis 哨兵模式…

科技项目验收测试:验证软件产品功能与性能的有效手段

科技项目验收测试是验证软件产品功能与性能的重要手段&#xff0c;在项目开发中起到了至关重要的作用。本文将从产品质量、需求验证、性能测试等方面&#xff0c;探讨科技项目验收测试的有效手段。 1、产品质量保证是验收测试的核心 科技项目验收测试的核心目标是验证软件产品…

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04 一、安装linux子系统 1.1、 启动或关闭Windows功能-适用于Linux的Windows子系统 1.2 WSL 官方文档 使用 WSL 在 Windows 上安装 Linux //1-安装 WSL 命令 wsl --install//2-检查正在运行的 WSL 版本&#xff1a;…

关于在VS2017中编译Qt项目遇到的问题

关于在VS2017中编译Qt项目遇到的问题 【QT】VS打开QT项目运行不成功 error MSB6006 “cmd.exe”已退出,代码为 2。如何在VS2017里部署的Qt Designer上编辑槽函数 【QT】VS打开QT项目运行不成功 error MSB6006 “cmd.exe”已退出,代码为 2。 链接 如何在VS2017里部署的Qt Design…

10.python设计模式【代理模式】

内容&#xff1a;为其他对象提供一种代理一控制对这个对象的访问 应用场景&#xff1a; 远程代理&#xff1a; 为远程的对象提供代理虚代理&#xff1a;根据需要创建很大的对象保护代理&#xff1a;控制对原始对象的访问&#xff0c;用于对象有不同访问权限时 UML图 举个例…

WIZnet W6100-EVB-Pico DHCP 配置教程(三)

前言 在上一章节中我们讲了网络信息配置&#xff0c;那些网络信息的配置都是用户手动的去配置的&#xff0c;为了能跟电脑处于同一网段&#xff0c;且电脑能成功ping通板子&#xff0c;我们不仅要注意子网掩码&#xff0c;对于IP地址主机位和网络位的划分&#xff0c;而且还要注…

【unity】Pico VR 开发笔记(基础篇)

Pico VR 开发笔记(基础篇) XR Interaction Tooikit 版本 2.3.2 一、环境搭建 其实官方文档已经写的很详细了&#xff0c;这里只是不废话快速搭建&#xff0c;另外有一项官方说明有误的&#xff0c;补充说明一下&#xff0c;在开发工具部分说明 插件安装——安装pico的sdk和XR…

编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)

系列文章目录 编程小白的自学笔记十一&#xff08;python爬虫入门三Selenium的使用实例详解&#xff09; 编程小白的自学笔记十&#xff08;python爬虫入门二实例代码详解&#xff09; 编程小白的自学笔记九&#xff08;python爬虫入门代码详解&#xff09; 目录 系列文章…

指针应用基础练习

&#xff08;1&#xff09;一级指针&#xff0c;二级指针 void getString(char **p) {*p "hello world"; }int main(void) {char *str NULL;getString(&str);printf("%s\n", str); } 代码分析&#xff1a; 定义了一个char型指针str&#xff0c;…

uni-app踩坑记

打包h5如何配置域名&#xff1a; 在manifest.json中配置域名 配置完成后无论是测试环境还是正式环境都带上/mobile/&#xff0c;否则会报错404 如何引入调试工具erada: 在默认的index.html中直接引入erada&#xff0c;页面样式会整个错乱&#xff0c;解决方案就是引入官方…

信号槽中的函数重载

信号槽中的函数重载 QT4的方式QT5的方式函数指针重载函数QT5信号函数重载解决方案 总结 QT4的方式 Qt4中声明槽函数必须要使用 slots 关键字, 不能省略。 信号函数&#xff1a; 槽函数&#xff1a; mainwondow: cpp文件&#xff1a; #include "mainwindow.h"…

WebSocket协议解析

文章目录 概要一、WS原理1.1、帧格式 二、WS实战2.1、客户端发起协议升级请求2.2、服务端响应协议升级2.3、核心事件2.4、心跳保活 三、总结 概要 项目中的IM系统是基于WebSocket做的&#xff0c;所以这里聊一下。 说到WS&#xff0c;不得不提HTTP,HTTP是基于TCP&#xff0c;面…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第四十二天 42/50【unordered_set】【双指针处理连续】【翻转字符串】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

AD21原理图的高级应用(五)自定义原理图模板及调用

&#xff08;五&#xff09;自定义原理图模板及调用 1.创建原理图模板2.调用原理图模板 1.创建原理图模板 利用 Altium Designer 软件在原理图中创建自己的模板,可以在图纸的右下角绘制一个表格用于显示图纸的一些参数,例如文件名、作者、修改时间、审核者、公司信息、图纸总数…

shopee,lazada,etsy店群如何高效安全的管理

对于电商卖家来说&#xff0c;要经营多个店铺&#xff0c;管理多个账号是非常常见的操作。为了避免账号关联被平台识别出来&#xff0c;需要使用防关联的浏览器来进行操作 ​1、支持多平台 支持同时管理多个电商平台店铺&#xff0c;Shopee、Lazada、etsy、poshmark、vinted等&…

Vue.js 生命周期函数

系列文章目录 Vue.js基础简答题 文章目录 系列文章目录前言一、创建阶段1.beforeCreate2.created3.beforeMount4.mounted 二、运行阶段1.beforeUpdate2.updated 三、销毁阶段1.beforeDestroy2.destroyed 总结 前言 Vue.js 生命周期指的是Vue实例的生命周期&#xff1b; Vue实…

【RabbitMQ】Linux系统服务器安装RabbitMQ

一、下载 首先应该下载erlang&#xff0c;rabbitmq运行需要有erland环境。 官网地址&#xff1a;https://www.erlang.org/downloads 下载rabbitmq 官网环境&#xff1a;https://www.rabbitmq.com/download.html 注意&#xff1a;el7对应centos7&#xff0c;el8对应centos8…

在Word中快速输入方框对号

在Word中输入方框对号播报文章 先输入“2611”&#xff0c;然后同时按ALTX&#xff0c; 插入 符号 其他符号

主流开源监控系统一览

减少故障有两个层面的意思&#xff0c;一个是做好常态预防&#xff0c;不让故障发生&#xff1b;另一个是如果故障发生&#xff0c;要能尽快止损&#xff0c;减少故障时长。而监控的典型作用&#xff0c;就是帮助我们发现及定位故障&#xff0c;这两个环节对于减少故障时长至关…