蜘蛛机器人代码 asp版
- 格式:rtf
- 大小:16.14 KB
- 文档页数:3
在ASP中常见的错误80004005信息和解决办法错误信息(错误信息我不用翻译成中文了吧,呵呵,大家谅解)Microsoft OLE DB Provider for ODBC Drivers error '80004005'[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.原因:这个错误发生在当IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在的目录没有正确的权限.(这就是为什么在Win95和PWS下没问题,因为win95根本就没有目录权限这一说)检查文件和目录的权限. 确定你能够在该目录中有能够新建和删除临时文件的权限。
这些临时文件其实是数据库建立在同一个目录下的文件, 但是要注意的是,有可能这些文件也可能建立在别的目录,例如 /Winnt.使用NT的文件监视程序监视文件失败时到底是访问了什么目录。
这个NT的文件监视程序可以在这个地方下载.如果你对数据库使用了一个网络地址,例如映射地址,就要检查一下共享文件和目录的权限,还要检查一下数据源文件(DSN)是否被别的程序标志成为正在使用中,这些别的程序一般是Visual InterDev,关闭任何一个InterDev中的正打开和数据库连接的项目。
这个错误还可能发生在这种情况:如果在DSN中使用了一个UNC路径(就是通用命名协议),请改用本地路径进行测试,因为如果对本地数据库使用UNC也可能出错。
还可能发生在这种情况,如果服务器要访问Access中的一个表,而这个表却联接在一个网络服务器上。
Active Server Pages教程二零零零年二月二日目录第一章引言 (3)第二章简介 (8)第三章ASP基础 (13)第四章脚本基础 (19)第五章脚本变量、函数、过程和条件语句 (22)第六章脚本循环语句 (27)第七章内建Request对象 (30)第八章内建Reponse对象 (36)第九章内建对象Application 和Session (42)第十章Global.asa文件的使用及Chat程序 (48)第十一章内建对象Server (53)第十二章数据库查询语言(1) (57)第十三章数据库查询语言(2) (62)第十四章ActiveX组件 (66)第十五章常用的ASP ActiveX组件 (70)第十六章其它的ASP常用组件 (75)第十七章ADO存取数据库时如何分页显示 (81)第十八章堵住ASP漏洞 (87)第十九章最新的ASP、IIS安全漏洞 (91)第一章引言您的网站是否仍一如既往地保持“静态”?目前呈几何增长的互联网网站中,有相当一部分仍固守“静态”,无形中已大大落后于时代的步伐。
所谓“静态”指的就是网站的网页内容“固定不变”,当用户浏览器通过互联网的HTTP(Hypertext Transport Pr otocol)协议向WEB服务器请求提供网页内容时,服务器仅仅是将原已设计好的静态HTML文档传送给用户浏览器。
其页面的内容使用的仅仅是标准的HTML代码,最多再加上流行的GIF89A格式的动态图片,比如产生几只小狗小猫跑来跑去的动画效果。
若网站维护者要更新网页的内容,就必须手动地来更新其所有的HTML文档。
“静态”网站的致命弱点就是不易维护,为了不断更新网页内容,你必须不断地重复制作HTML文档,随着网站内容和信息量的日益扩增,你就会感到工作量大得出乎想象。
你不禁要问:那么什么是动态网站呢?这就是本文将重点讲述的核心,所谓“动态”,并不是指那几个放在网页上的GIF动态图片,在这里笔者为动态页面的概念制定了以下几条规则:1、“交互性”即网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大事所趋。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><!--#include file="inc/conn.asp" --><%'首先我们设置数据库=============================================='数据库结构'类别1表名称:a 字段:ID,Name 说明:ID为主键是类别1的ID值,Name为类别1的名称'类别2表名称:aa 字段:ID,aID,Name 说明:ID为主键是类别2的ID值,aID为所属类别1的ID值,Name为类别2的名称'类别3表名称:aaa 字段:ID,aID,aaID,Name 说明:ID为主键是类别3的ID值,aID为所属类别1的ID值,aaID为所属类别2的ID值,Name为类别3的名称%><%response.write"1:"&Request.form("s1")&"<BR>"response.write"2:"&Request.form("s2")&"<BR>"response.write"3:"&Request.form("s3")&"<BR>"%><body><!-- 三级联动菜单开始--><script language="JavaScript"><!--<%'二级数据保存到数组Dim count2,rsClass2,sqlClass2set rsClass2=server.createobject("adodb.recordset")'sqlClass2="select * from aa"sqlClass2="select * from t_city"rsClass2.open sqlClass2,conn,1,1%>var subval2 = new Array();//数组结构:一级根值,二级根值,二级显示值<%count2 = 0do while not rsClass2.eof%>subval2[<%=count2%>] = newArray('<%=rsClass2("proid")%>','<%=rsClass2("cityid")%>','<%=rsClass2("cityname")%>')<%count2 = count2 + 1rsClass2.movenextlooprsClass2.close%><%'三级数据保存到数组Dim count3,rsClass3,sqlClass3set rsClass3=server.createobject("adodb.recordset")'sqlClass3="select * from aaa"sqlClass3="select * from t_area"rsClass3.open sqlClass3,conn,1,1%>var subval3 = new Array();//数组结构:二级根值,三级根值,三级显示值<%count3 = 0do while not rsClass3.eof%>subval3[<%=count3%>] = newArray('<%=rsClass3("cityid")%>','<%=rsClass3("areaid")%>','<%=rsClass3("areaname")%>') <%count3 = count3 + 1rsClass3.movenextlooprsClass3.close%>function changeselect1(locationid){document.form1.s2.length = 0;document.form1.s2.options[0] = new Option('==请选择类别==','');document.form1.s3.length = 0;document.form1.s3.options[0] = new Option('==请选择专题==','');for (i=0; i<subval2.length; i++){if (subval2[i][0] == locationid){document.form1.s2.options[document.form1.s2.length] = newOption(subval2[i][2],subval2[i][1]);}}}function changeselect2(locationid){document.form1.s3.length = 0;document.form1.s3.options[0] = new Option('==请选择专题==','');for (i=0; i<subval3.length; i++){if (subval3[i][0] == locationid){document.form1.s3.options[document.form1.s3.length] = newOption(subval3[i][2],subval3[i][1]);}}}//--></script><form name="form1" method="post" action="test1.asp">三级联动:<%Dim count1,rsClass1,sqlClass1set rsClass1=server.createobject("adodb.recordset")'sqlClass1="select * from a"sqlClass1="select * from t_province"rsClass1.open sqlClass1,conn,1,1%><select name="s1" onChange="changeselect1(this.value)"><option>==请选择频道==</option><%count1 = 0do while not rsClass1.eofresponse.write"<option value="&rsClass1("proid")&">"&rsClass1("proname")&"</option>" count1 = count1 + 1rsClass1.movenextlooprsClass1.close%></select><select name="s2" onChange="changeselect2(this.value)"><option>==请选择类别==</option></select><select name="s3"><option>==请选择专题==</option></select><input type="submit" name="Submit" value="提交"></form><!-- 三级联动菜单结束--></body></html>。
/*============================================================================= ===========【文件名】 STR280-test1.c 【程序功能】综合测试【MCU】 STC12C5A60S2 ofc=外部12M 【编写日期】 whr 2011年12月29日【修改时间】 QXZ 2012年01月05日【修改说明】=============================================================================== =========*/ #include <STC12C5A.H> #include <intrins.h>sbit DIR_R=P1^2; //PWMR的正反转控制位,1代表正 sbit DIR_L=P1^5; //PWML的正反转控制位,1代表正 sbit MOT_DIR1=P2^0; //电机1/3方向 sbit MOT_EN1=P2^1; //电机1/3使能 sbit MOT_DIR2=P2^2; //电机2/4方向 sbit MOT_EN2=P2^3; //电机2/4使能 sbit start_=P3^2; //启动按键sbit SER_BS=P1^6; //接近开关片选 sbit MOT_BS=P1^7; //电机输出片选 sbit LAMP=P3^7; //警灯输出/*~~~~~~用于接收巡线传感器的8位信号~~~~~~~*/ sbit LS_1=P0^0; sbit LS_2=P0^1; sbit LS_3=P0^2; sbit LS_4=P0^3; sbit LS_5=P0^4 ; sbit LS_6=P0^5; sbit LS_7=P0^6; sbit LS_8=P0^7;/*~~~~~~用于接收接近传感器的信号~~~~~~~*/ sbit PS_1=P3^3; sbit PS_2=P3^4; sbit PS_3=P3^5; sbit PS_4=P3^6; bit PS_5; bit P S_6; bit PS_7; bit PS_8;sbit PS_9 =P2^4;sbit PS_10=P2^5; sbit PS_11=P2^6; sbit PS_12=P2^7;/*######变量用途说明########################################### num 用于记录传感器的有效信号数目,以便机器人做出相应的动作 c 用于记录所寻白条数的个数###############################################################*/ unsigned char nu m,c=0,e;#define l 1 //左电机 #define r 2 //右电机 #define rl 3 //左右电机 #define DJ1 4 //手爪电机#define DJ2 5 //横向平移电机 #define DJ3 6 //升降电机 #define DJ4 7 //回转电机 #define j 8 //手爪夹紧 #define s 9 //手爪松开#define qpy 10 //手爪前平移#define hpy 11 //手爪后平移 #define xs 12 //向上升 #define xx 13 //向下降#define wz1 14 //上下位置1(最上位) #define wz2 15 //上下位置2 #define wz3 16 //上下位置3#define wz4 17 //上下位置4#define wz5 18 //上下位置5(最下位) #define qhz 19 //前回转 #define hhz 20//后回转#define ps58 22 //接近开关选择PS_5~PS_8 #define ps912 23 //接近开关选择PS_9~PS_12 #define f 'f' //代表电机正转 #define forward 'f'#define b 'b' //代表电机反转 #define backward 'b'/*=======================================================================【函数原形】:void pwm0_1() 【功能说明】:PCA时钟源控制寄存器计数初值的初始化设置【编写日期】:2011年1月20日========================================================================*/void pwm0_1() {CCON=0x00; CH=0; CL=0;CMOD=0x00;}/*=======================================================================【函数原形】:void PWM_R(unsigned char Fosc_1) 【功能说明】:PWM_R控制寄存器设置【参数说明】:Fosc_0 Fosc_0为占空比设置形参【编写日期】:2011年1月20日========================================================================*/void PWM_R(unsigned int Fosc_0) {CCAP0H=CCAP0L=((Fosc_0)*25)/10; //此代码用于控制输出的占空比 CCAPM0=0X42; //8位PWM输出,无中断 PCA_PWM0=0x00; }/*=======================================================================【函数原形】:void PWM_L(unsigned char Fosc_1) 【功能说明】:PWM_L控制寄存器设置【参数说明】:Fosc_1 Fosc_1为占空比设置形参【编写日期】:2011年1月20日========================================================================*/void PWM_L(unsigned int Fosc_1){CCAP1H=CCAP1L=((Fosc_1)*25)/10; //此代码用于控制输出的占空比 CCAPM1=0X42; //8位PWM输出,无中断 PCA_PWM1=0x00;}/*=======================================================================【函数原形】:void delay_ms(unsigned int T)【参数说明】:T 延时时间设定 T 0~60000 【函数功能】:ms级延时函数(目前所用此时间仅为大概值)【编写日期】:2011年1月20日========================================================================*/ void delay_ms(unsigned int T) {unsigned int CON; unsigned int i;for(i=0;i<T;i++)for(CON=0;CON<500;CON++);}/*=======================================================================【函数原形】:void motor(unsigned char m,unsigned char z,unsigned int n,) 【功能说明】:电机运动【参数说明】:m 电机,z 方向,n 占空比【调用说明】:如:motor(r,f,60) 右电机以60%的速度正转【编写日期】:whr 2011年12月29日========================================================================*/ void motor(unsigned char m,unsigned char z,unsigned int n) {switch (m) {case r: if(z==forward||z==f) {CR=1;PWM_R(n);DIR_R=0;}else if(z==backward||z==b) {CR=1;PWM_R(n);DIR_R=1;} break;case l: if(z==forward||z==f) {CR=1;PWM_L(n);DIR_L=0;} else if(z==backward||z==b) {CR= 1;PWM_L(n);DIR_L=1;} break;case DJ1: if(z==forward||z==f) {MOT_BS=1;MOT_DIR1=0;MOT_EN1=0;} else if(z==backwar d||z==b) {MOT_BS=1;MOT_DIR1=1;MOT_EN1=0;} break; case DJ2: if(z==forward||z==f) {MO T_BS=1;MOT_DIR2=1;MOT_EN2=0;} else if(z==backward||z==b) {MOT_BS=1;MOT_DIR2=0; MOT_EN2=0;}break;case DJ3: if(z==forward||z==f) {MOT_BS=0;MOT_DIR1=1;MOT_EN1=0;} else if(z==backwar d||z==b) {MOT_BS=0;MOT_DIR1=0;MOT_EN1=0;}break;case DJ4: if(z==forward||z==f) {MOT_BS=0;MOT_DIR2=1;MOT_EN2=0;} else if(z==backwar d||z==b) {MOT_BS=0;MOT_DIR2=0;MOT_EN2=0;} break; default:break;} }/*==================================================== 【函数原形】: void stop (unsigned char m) 【参数说明】: m:选择电机【功能说明】: 停止电机转动【调用说明】:如:stop(r) 使右电机的转速为零【编写日期】: whr 2011年12月90日 ====================================================*/ void stop (unsign ed char m) { switch(m) {case r : PWM_R(0);DIR_R=0;break; case l : PWM_L(0);DIR_L=0;break;case rl : CR=0;PWM_R(0);DIR_R=0;PWM_L(0);DIR_L=0;break; case DJ1 : MOT_BS=1;MOT_DIR1=0;MOT_EN1=1;break; case DJ2 : MOT_BS=1;MOT_DIR2=0;MOT_EN2=1;break; case DJ3 : MOT_BS=0;MOT_DIR1=0;MOT_EN1=1;break; case DJ4 : MOT_BS=0;MOT_DIR2=0;MOT_EN2=1; break; default : break; } }/*================================================================ 【函数原形】: void SER_SELECT(unsigned char gd) 【功能说明】: 接近开关选择 PS_5 ~PS_8/ PS_9 ~PS_12【参数说明】: gd: PS_5 ~PS_8: PS58 / PS_9 ~PS_12:PS912 【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ // void SER_S EL(unsigned char psgd) void SER_SEL(unsigned char psgd) {if(psgd==ps58) { SER_BS=0; PS_5=PS_9; PS_6=PS_10; PS_7=PS_11;PS_8=PS_12;}else if(psgd==ps912) { SER_BS=1; } return; }/*================================================================ 【函数原形】: void DJ4J_S(unsigned char js) 【功能说明】: 手爪夹紧/松开【参数说明】: js 夹紧(js=j)/松开(js=s)设定【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ void DJ1_JS( unsigned char js) {if(js==j) { motor(DJ1,f,100); while(1) {if(PS_1==0) {stop(DJ1); delay_ms(50); return; }}}else if(js==s){ motor(DJ1,b,100); while(1) {if(PS_2==0) {stop(DJ1); delay_ms(50); return; } }}}/*================================================================ 【函数原形】: void DJ1_PY(unsigned char py) 【功能说明】: 手爪前后平移【参数说明】: py:向前(py=qpy)/向后(py=hpy)设定【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ void DJ2_PY( unsigned char py) {if(py==qpy){ motor(DJ2,f,100); while(1) {if(PS_3==0) { stop(DJ2); delay_ms(50); return; }}}else if(py==hpy) { motor(DJ2,b,100); while(1) {if(PS_4==0) {stop(DJ2); delay_ms(50); return; } }}}/*================================================================【函数原形】: void DJ2_SX(unsigned char sx,unsigned char wz) 【功能说明】: 手爪上下升降运动【参数说明】: sx:向上(sx=xs)/向下(sx=xx)设定wz: 1号接近开关(wz1) ;2号接近开关(wz2);3号接近开关(wz3);4号接近开关(wz4)【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:================================================================== */ void DJ3_SX (unsigned char sx,unsigned char wz) {if(sx==xs){ motor(DJ3,f,100); }else if(sx==xx){ motor(DJ3,b,100); }if(wz==wz1) {while(1){ SER_SEL(ps58); delay_ms(5); if(PS_5==0) {stop(DJ3); delay_ms(50); return; } } }else if(wz==wz2) {while(1) {SER_SEL(ps58); delay_ms(5); if(PS_6==0) {stop(DJ3); delay_ms(50); return;}}}else if(wz==wz3) { while(1) {SER_SEL(ps58); delay_ms(5); if(PS_7==0) {stop(DJ3); delay_ms(50); return; } } }else if(wz==wz4) {while(1) {SER_SEL(ps58); delay_ms(5); if(PS_8==0) {stop(DJ3); delay_ms(50); return; } } }else if(wz==wz5) {while(1) {SER_SEL(ps912); delay_ms(5);if(PS_9==0) {stop(DJ3); delay_ms(50); return; } }}}/*================================================================ 【函数原形】: void DJ3_HZ(unsigned char hz) 【功能说明】: 回转工作【参数说明】: hz:向前回转(hz=qhz)/向后回转(hz=hhz)设定【功能改动说明】: 【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ void DJ4_HZ( unsigned char hz) {if(hz==qhz){ motor(DJ4,b,100); delay_ms(6600); stop(DJ4);delay_ms(500);motor(DJ4,b,100); }else if(hz==hhz) { motor(DJ4,f,100); delay_ms(3400); stop(DJ4);delay_ms(500); motor(DJ4,f,100); }//delay_ms(2000); while(1){SER_SEL(ps912); if(PS_10==0) {stop(DJ4); delay_ms(50); return; }}if(ti!=0){ /*~~~~~~若条件满足则记一个白条~~~~~~~*/ if(num>5) //5个传感器信号为有效判断为一条有效白条{/*~~~~~~寻白条时去除干扰信号的影响~*/ delay_ms(1); num=0;if(LS_1) num++;if(LS_2) num++; if(LS_3) num++; if(LS_4) num++; if(LS_5) num++; if(LS_ 6) num++; if(LS_7) num++;if(LS_8) num++; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if(num>5) {c=c+1; //如条件满足则白条计数标志位加一if(c==ti) {c=0; motor(l,f,30);motor(r,f,30);delay_ms(300); return; }else {delay_ms(600); //跳过所寻白条,参数可根据具体速度设定}} } }/*++++++++++++++++基准速度大于30时的巡线程序++++++++++++++++*/ if(S_B>=30) { /***************************************************** [功能] :纠偏程序[改动说明]:若要改变纠偏力度,只需改变S_B后的数值。
基于蚁群算法的机器人路径规划MATLAB源代码————————————————————————————————作者: ————————————————————————————————日期:基于蚁群算法的机器人路径规划MATLAB源代码基本思路是,使用离散化网格对带有障碍物的地图环境建模,将地图环境转化为邻接矩阵,最后使用蚁群算法寻找最短路径。
function [ROUTES,PL,Tau]=ACASPS(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q)%%---------------------------------------------------------------% ACASP.m%基于蚁群算法的机器人路径规划%GreenSim团队——专业级算法设计&代写程序% 欢迎访问GreenSim团队主页→%% ---------------------------------------------------------------%输入参数列表% G地形图为01矩阵,如果为1表示障碍物%Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)%K 迭代次数(指蚂蚁出动多少波)% M 蚂蚁个数(每一波蚂蚁有多少个)% S起始点(最短路径的起始点)% E终止点(最短路径的目的点)%Alpha表征信息素重要程度的参数% Beta 表征启发式因子重要程度的参数%Rho 信息素蒸发系数% Q 信息素增加强度系数%%输出参数列表% ROUTES每一代的每一只蚂蚁的爬行路线%PL 每一代的每一只蚂蚁的爬行路线长度%Tau 输出动态修正过的信息素%% --------------------变量初始化----------------------------------%loadD=G2D(G);N=size(D,1);%N表示问题的规模(象素个数)MM=size(G,1);a=1;%小方格象素的边长Ex=a*(mod(E,MM)-0.5);%终止点横坐标if Ex==-0.5Ex=MM-0.5;endEy=a*(MM+0.5-ceil(E/MM));%终止点纵坐标Eta=zeros(1,N);%启发式信息,取为至目标点的直线距离的倒数%下面构造启发式信息矩阵for i=1:Nix=a*(mod(i,MM)-0.5);if ix==-0.5ix=MM-0.5;endiy=a*(MM+0.5-ceil(i/MM));ifi~=EEta(1,i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;elseEta(1,i)=100;endendROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度%%-----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁-------------------- fork=1:K%disp(k);form=1:M%% 第一步:状态初始化W=S;%当前节点初始化为起始点Path=S;%爬行路线初始化PLkm=0;%爬行路线长度初始化TABUkm(S)=0;%已经在初始点了,因此要排除DD=D;%邻接矩阵初始化%%第二步:下一步可以前往的节点DW=DD(W,:);DW1=find(DW<inf);forj=1:length(DW1)if TABUkm(DW1(j))==0endendLJD=find(DW<inf);%可选节点集Len_LJD=length(LJD);%可选节点的个数%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同while W~=E&&Len_LJD>=1%%第三步:转轮赌法选择下一步怎么走PP=zeros(1,Len_LJD);for i=1:Len_LJDendPP=PP/(sum(PP));%建立概率分布Pcum=cumsum(PP);Select=find(Pcum>=rand);to_visit=LJD(Select(1));%下一步将要前往的节点%% 第四步:状态更新和记录Path=[Path,to_visit];%路径增加PLkm=PLkm+DD(W,to_visit);%路径长度增加W=to_visit;%蚂蚁移到下一个节点for kk=1:Nif TABUkm(kk)==0DD(W,kk)=inf;DD(kk,W)=inf;endendTABUkm(W)=0;%已访问过的节点从禁忌表中删除DW=DD(W,:);LJD=find(DW<inf);%可选节点集Len_LJD=length(LJD);%可选节点的个数end%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度ROUTES{k,m}=Path;if Path(end)==EPL(k,m)=PLkm;elsePL(k,m)=inf;endend%% 第六步:更新信息素Delta_Tau=zeros(N,N);%更新量初始化for m=1:MifPL(k,m)<infROUT=ROUTES{k,m};TS=length(ROUT)-1;%跳数PL_km=PL(k,m);for s=1:TSx=ROUT(s);y=ROUT(s+1);Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km;Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;endendendTau=(1-Rho).*Tau+Delta_Tau;%信息素挥发一部分,新增加一部分end%% ---------------------------绘图--------------------------------plotif=0;%是否绘图的控制参数if plotif==1%绘收敛曲线meanPL=zeros(1,K);minPL=zeros(1,K);for i=1:KPLK=PL(i,:);Nonzero=find(PLK<inf);PLKPLK=PLK(Nonzero);meanPL(i)=mean(PLKPLK);minPL(i)=min(PLKPLK);endfigure(1)plot(minPL);hold onplot(meanPL);grid ontitle('收敛曲线(平均路径长度和最小路径长度)');xlabel('迭代次数');ylabel('路径长度');%绘爬行图figure(2)axis([0,MM,0,MM])fori=1:MMfor j=1:MMifG(i,j)==1x1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);hold onelsex1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);hold onendendendhold onROUT=ROUTES{K,M};Rx=ROUT;Ry=ROUT;forii=1:LENROUTRx(ii)=a*(mod(ROUT(ii),MM)-0.5);if Rx(ii)==-0.5Rx(ii)=MM-0.5;endRy(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));endplot(Rx,Ry)endplotif2=0;%绘各代蚂蚁爬行图if plotif2==1figure(3)axis([0,MM,0,MM])for i=1:MMfor j=1:MMif G(i,j)==1x1=j-1;y1=MM-i;x2=j;y2=MM-i;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);hold onelsex1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);hold onendendendfork=1:KPLK=PL(k,:);minPLK=min(PLK);pos=find(PLK==minPLK);m=pos(1);ROUT=ROUTES{k,m};LENROUT=length(ROUT);Rx=ROUT;Ry=ROUT;for ii=1:LENROUTRx(ii)=a*(mod(ROUT(ii),MM)-0.5);if Rx(ii)==-0.5Rx(ii)=MM-0.5;endRy(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));endplot(Rx,Ry)hold onendend源代码运行结果展示。
翻页:<%Set rs = server.CreateObject("Adodb.RecordSet")rs.open sql,c onn,1,1if not rs.eof thenif request("pagenum")="" thenpagenum=1elseif IsNumeric(request("pagenum")) thenpagenum=Cint(request("pagenum"))elsepagenum=1end ifend ifrs.pagesize=40if pagenum<=0 then pagenum=1if pagenum>rs.pagecount then pagenum=rs.pagecount'response.write "["&pagenum&"]"rs.absolutepage=pagenum '转到要查询的页。
for i=1 to rs.pagesize%>循环内容<%rs.movenextif rs.eof then exit fornextelse%>还没记录!<%end if%><%response.write("每页"&rs.pagesize&"项 共"&rs.recordcount&"项 "&pagenum&"/"&rs.pagecount&" ")if 1 < pagenum then '向上翻页response.write("<a href='?pagenum=1'>首页</a> ")response.write("<a href='?pagenum="&pagenum-1&"'>上一页</a> ")elseresponse.write("<font disabled>首页上一页 </font>")end ifif pagenum >= rs.pagecount then '向下翻页response.write("<font disabled>下一页尾页</font> ")else'response.write("<br>rs.pagecount="&rs.pagecount&"<br>pagenum="&pagenum&"<br>")response.write(" <a href='?pagenum="&pagenum+1&"'>下一页</a> ")response.write("<a href='?pagenum="&rs.pagecount&"'>尾页</a> ")end if%>VB回车换行符:vbCrLf是VB中用于表示“回车换行”的字符串常数(长度为2字节),相当于Chr(13)+Chr(10),或者汇编中的DB 0AH,0DH,$由于是常数,所以不会影响速度。
Unit 14网络爬虫网络爬虫是一个计算机程序,它自动地有条不紊地或以非常有序的方式浏览万维网。
网络爬虫还有另外很多名称,如蚂蚁,自动索引编辑器,机器人,网络蜘蛛,网络机器人,或,特别是在交朋结友的社区网站中,叫作网络疾跑器。
这个过程被称为网络爬行或网络蜘蛛。
很多网站,尤其是搜索引擎,把网络蜘蛛当作一种提供最新数据手段。
网络爬虫主要任务是拷贝所有的访问页面,然后搜索引擎负责编写这些下载网页的索引,目的是提供快速搜索。
爬行程序也可用于自动执行维护任务,如在网站上检查链接或验证HTML代码。
此外,它还可用于收集特定类型的信息网页,如大量收集e-mail地址(通常用于发送垃圾邮件)。
网络爬虫的艰巨任务网络爬虫是一种类型的机器人,或者软件代理。
在一般情况下,它开始访问的URL的列表,称为种子。
爬虫在访问这些URLs的时候,它鉴别页面中的所有超链接,并将它们添加到URL的列表中准备访问,称为抓取前沿。
根据一套政策对前沿的URL进行循环式地访问。
网络容量之大意味着爬虫在一个特定的时间内下载的网页数量有限的,所以它需要把下载的内容根据其重要性进行排序。
网页内容的高变化率意味页面可能已经更新,甚至删除。
服务器端软不断件产生的可以爬行的URL数量巨大,这就使得网络抓取工具难以避免检索重复的内容。
(基于URL的)HTTP·GE参数存在着无穷的组合,实际上只有一小部分能够返回独特的内容。
例如,一个简单的在线照片库为用户提供了四种分类选项,三种缩略图选择,两种文件格式,以及一个可有可无的禁用用户提供的内容,相同的内容可以有48个不同的URL进行访问,所有这些都可能链接到该网站。
这个数子组合给产生了一个爬虫必须解决的问题,因为它们必须对通过相对较小的脚本变化无穷的组合排序进行分类,以获取独特的内容。
策略组合爱德华兹等人指出,“既然带宽进行抓取既不是无限的,也没有自由,如果要维持某种保证质量或更新的合理措施,爬行网络就必须要以一种可以升级的和有效的方式进行。
25编程器源码在这篇文章中,我们将分享25个有趣的编程器源码。
这些源码范围从简单的Hello World程序到复杂的算法和数据结构实现。
无论你是初学者还是有经验的开发者,这些源码都能帮助你提高你的编程技能。
1. Hello World:这是每个编程新手的必备源码。
它打印出'Hello World!',向你展示了如何输出一条简单的消息。
2. 计算器:这个源码将帮助你创建一个简单的计算器,让用户输入数字和运算符,并计算结果。
3. 猜数字游戏:这个源码使用随机数生成一个数字,并要求玩家猜这个数字是多少。
它通过循环和条件语句来实现。
4. 贪吃蛇游戏:这个源码将帮助你创建一个经典的贪吃蛇游戏。
它使用图形库来实现游戏界面,并通过键盘输入来控制蛇的移动。
5. 排序算法:这个源码实现了几种常见的排序算法,如冒泡排序、插入排序和快速排序。
它展示了如何在数组中排序元素。
6. 搜索算法:这个源码实现了几种常见的搜索算法,如线性搜索、二分搜索和广度优先搜索。
它展示了如何在数组或图中查找特定的元素。
7. 文件压缩器:这个源码实现了一个简单的文件压缩算法,可以将文件压缩成较小的文件,并可以解压缩回原始的文件。
8. 文本编辑器:这个源码将帮助你创建一个基本的文本编辑器,可以打开、编辑和保存文本文件。
9. 图像处理器:这个源码实现了一些基本的图像处理算法,如灰度化、边缘检测和图像模糊。
它展示了如何处理图像文件。
10. 网络爬虫:这个源码实现了一个简单的网络爬虫,可以从网页中提取数据并保存到文件中。
11. 邮件客户端:这个源码帮助你创建一个基本的邮件客户端,可以发送和接收邮件。
12. 网站登陆系统:这个源码实现了一个简单的网站登陆系统,可以验证用户的用户名和密码,并授予相应的权限。
13. 日历应用:这个源码将帮助你创建一个简单的日历应用,可以添加、编辑和删除事件。
14. 聊天应用:这个源码实现了一个简单的聊天应用,可以让用户之间进行实时的消息传递。
邮件方面:CDONTS:<%Set cdomail = Server.CreateObject("CDONTS.NewMail") '建立邮件对象cdomail.Subject = "Mail Subject" '邮件标题cdomail.From = "Sender's Mail" '发件人的地址cdomail.To = "Email will from" '收件人的地址cdomail.Body = "Mail Body" '邮件的内容cdomail.Send '执行发送%>这种方法发送邮件是最简单的,同时也带来一定的问题,就是很少有服务器会开这项服务!我们写程序,一般情况下都是说要代码模块化,这样方便维护,同时也方便移植。
因此,我在这里将这个发邮件的写成一个子程,在调用的时候可以直接调用(当然,如果你高兴写成函数的话也是可以的,这个主要是看个人兴趣):<%'参数说明'Subject : 邮件标题'MailAddress : 发件服务器的地址,如'Email : 收件人邮件地址'Sender : 发件人姓名'Content : 邮件内容'Fromer : 发件人的邮件地址----------------------------Jmail:Sub SendAction(subject, mailaddress, email, sender, content, fromer)Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUEjmail.logging = true '启用使用日志jmail.Charset = "GB2312" '邮件文字的代码为简体中文jmail.ContentType = "text/html" '邮件的格式为HTML的jmail.ServerAddress = mailaddress '发送邮件的服务器jmail.AddRecipient Email '邮件的收件人jmail.SenderName = sender '邮件发送者的姓名jmail.Sender = fromer '邮件发送者的邮件地址jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢,3 为默认值jmail.Subject = subject '邮件的标题jmail.Body = content '邮件的内容'由于没有用到密抄跟抄送,这里屏蔽掉这两句,如果您有需要的话,可以在这里恢复'jmail.AddRec ipientBCC Email '密件收件人的地址'jmail.AddRec ipientCC Email '邮件抄送者的地址jmail.Execute() '执行邮件发送jmail.Close '关闭邮件对象End Sub'调用此Sub的例子Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromerstrSubject = "这是一封用JMAIL发送的测试邮件"strContent = "JMail组件发送测试成功!"strEmail = "runbing@"strFromer = "runbing@"strMailAddress = ""Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)%><%Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUEjmail.logging = true '启用使用日志jmail.Charset = "GB2312" '邮件文字的代码为简体中文jmail.ContentType = "text/html" '邮件的格式为HTML的jmail.ServerAddress = "Server Address" '发送邮件的服务器jmail.AddRecipient Email '邮件的收件人jmail.SenderName = "SenderName" '邮件发送者的姓名jmail.Sender = "Email Address" '邮件发送者的邮件地址jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢,3 为默认值jmail.Subject = "Mail Subject" '邮件的标题jmail.Body = "Mail Body" '邮件的内容jmail.AddRecipientBCC Email '密件收件人的地址jmail.AddRecipientCC Email '邮件抄送者的地址jmail.Execute() '执行邮件发送jmail.Close '关闭邮件对象%>w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件,有些方法需要身份验证的(如163、yahoo等),可以用下面的方法解决:<%Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值jmail.logging = true '启用邮件日志jmail.Charset = "GB2312" '邮件的文字编码为国标jmail.ContentType = "text/html" '邮件的格式为HTML格式jmail.AddRecipient Email '邮件收件人的地址jmail.From = "Email From for Sender" '发件人的E-MAIL地址jmail.MailServerUserName = "UserName of Email" '登录邮件服务器所需的用户名jmail.MailServerPassword = "Password of Email" '登录邮件服务器所需的密码jmail.Subject = "Mail Subject" '邮件的标题jmail.Body = "Mail Body" '邮件的内容jmail.Prority = 1 '邮件的紧急程序,1 为最快,5 为最慢,3 为默认值jmail.Send("Server Address") '执行邮件发送(通过邮件服务器地址)jmail.Close() '关闭对象%>----------------------------------------------------------------asp的错误集合(这个要看仔细了哟):ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中) MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)-->sql语句出错(字段名错误,或数据类型不匹配)MicrosoftOLEDBProviderforODBCDrivers(0x80040E07)-->sql语句出错(要插入或更新的字段的类型与变量数据类型不匹配)MicrosoftOLEDBProviderforODBCDrivers(0x80040E57)-->sql语句出错(要插入或更新的数据溢出)MicrosoftOLEDBProviderforODBCDrivers(0x80040E10)-->sql语句出错(update字段名或要更新的数据类型错误)MicrosoftOLEDBProviderforODBCDrivers(0x80004005)-->sql语句出错(要插入或更新的字段的数值不能为空值)MicrosoftOLEDBProviderforODBCDrivers(0x80004005)-->打开数据库出错,没有在指定目录发现数据库MicrosoftOLEDBProviderforODBCDrivers(0x80040E37)-->没有发现表MicrosoftVBscript运行时错误(0x800A000D)-->错误引用rs变量(rs对像已关闭或未定义) MicrosoftVBscript运行时错误(0x800A01C2)-->vbscript脚本错误(vbscript语句出错) MicrosoftVBscript运行时错误(0x800A0006)-->vbscript脚本错误(溢出错误) MicrosoftVBscript编译器错误(0x800A040E)-->缺少loopMicrosoftVBscript编译器错误(0x800A03EA)-->缺少if或endifMicrosoftVBscript编译器错误(0x800A03EE)-->语句未结束(缺少")")MicrosoftVBscript编译器错误(0x800A03F6)-->if语句出错(缺少endif)MicrosoftVBscript运行时错误(0x800A005B)-->缺少setMicrosoftVBscript运行时错误(0x800A0005)-->变量未定义MicrosoftVBscript编译器错误(0x800A03F9)-->if语句缺少thenMicrosoftVBscript编译器错误(0x800A0411)-->dim语句定义错误MicrosoftVBscript编译器错误(0x800A0408)-->sql语句错误ADODB.Recordset(0x800A0BB9)-->sql语句出错(sql语句或conn语句未定义或对一个rs属性进行赋值时发生错误)ADODB.Recordset(0x800A0CC1)-->rs对像出错(rs对像本身不存在或错误地引用了一个不存在的字段名)ADODB.Recordset(0x800A0BCD)-->rs对像出错(记录集中没有记录却对记录集进行操作) ADODB.Recordset(0x800A0E78)-->rs对像出错(记录集不存在,缺少rs.open语句) ADODB.Recordset(0x800A0CC1)-->rs对像出错(引用了一个不存在的字段名)ADODB.Recordset(0x800A0E7D)-->conn定义错误ADODB.Recordset(0x800A0CB3)-->数据库以只读方式打开,无法更新数据ASP 编程中20 个非常有用的例子1.如何用Asp判断你的网站的虚拟物理路径答:使用Mappath方法< p align="center" >< font size="4" face="Arial" >< b >The Physical path to this virtual website is:< /b >< /font >< font color="#FF0000" size="6" face="Arial" >< %= Server.MapPath("\")% >< /font >< /p >2.我如何知道使用者所用的浏览器?答:使用the Request object方法strBrowser=Request.ServerV ariables("HTTP_USER_AGENT")If Instr(strBrowser,"MSIE") < > 0 ThenResponse.redirect("ForMSIEOnly.htm")ElseResponse.redirect("ForAll.htm")End If3.如何计算每天的平均反复访问人数答:解决方法< % startdate=DateDiff("d",Now,"01/01/1990")if strdate< 0 then startdate=startdate*-1avgvpd=Int((usercnt)/startdate) % >显示结果< % response.write(avgvpd) % >that is it.this page have been viewed since November 10,19984.如何显示随机图象< % dim p,ppic,dpicppic=12randomizep=Int((ppic*rnd)+1)dpic="graphix/randompics/"&p&".gif"% >显示< img src="< %=dpic% >" >5.如何回到先前的页面答:< a href="< %=request.serverV ariables("Http_REFERER")% >" >preivous page< /a >或用图片如:< img src="arrowback.gif"alt="< %=request.serverV ariables("HTTP_REFERER")% >" >6.如何确定对方的IP地址答:< %=Request.serverV ariables("REMOTE_ADDR)% >7.如何链结到一副图片上答:< % @Languages=vbs cript % >< % response.expires=0strimagename="graphix/errors/erroriamge.gif"response.redirect(strimagename)% >8.强迫输入密码对话框答:把这句话放载页面的开头< % response.status="401 not Authorized"response.end% >9.如何传递变量从一页到另一页答:用HIDDEN 类型来传递变量< % form method="post" action="mynextpage.asp" >< % for each item in request.form % >< input namee="< %=item% >" type="HIDDEN"value="< %=server.HTMLEncode(Request.form(item)) % >" >< % next % >< /form >10.为何我在asp 程序内使用msgbox,程序出错说没有权限答:由于asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你(:) 呵呵) 没有权限。
蜘蛛机器人代码 asp版.txt男人应该感谢20多岁陪在自己身边的女人。
因为20岁是男人人生的最低谷,没钱,没事业;而20岁,却是女人一生中最灿烂的季节。
只要锄头舞得好,哪有墙角挖不到?<%
' 蜘蛛机器人
function spiderbot()
Dim Url,GetLocationURL
Dim ServerPort,ServerName,ScriptName,QueryString
ServerName = Request.ServerVariables("SERVER_NAME")
ServerPort = Request.ServerVariables("SERVER_PORT")
ScriptName = Request.ServerVariables("SCRIPT_NAME")
QueryString = Request.ServerVariables("QUERY_STRING")
Url="http://"&ServerName
If ServerPort <> "80" Then Url = Url & ":" & ServerPort
Url=Url&ScriptName
If QueryString <>"" Then Url=Url&"?"& QueryString
GetLocationURL=Url
dim agent: agent = lcase(request.servervariables("http_user_agent"))
dim Bot: Bot = ""
if instr(agent, "googlebot") > 0 then Bot = "Google"
if instr(agent, "mediapartners-google") > 0 then Bot = "Google Adsense"
if instr(agent, "baiduspider") > 0 then Bot = "Baidu"
if instr(agent, "sogou spider") > 0 then Bot = "Sogou"
if instr(agent, "yahoo") > 0 then Bot = "Yahoo!"
if instr(agent, "msn") > 0 then Bot = "MSN"
if instr(agent, "ia_archiver") > 0 then Bot = "Alexa"
if instr(agent, "iaarchiver") > 0 then Bot = "Alexa"
if instr(agent, "sohu") > 0 then Bot = "Sohu"
if instr(agent, "sqworm") > 0 then Bot = "AOL"
if instr(agent, "yodaobot") > 0 then Bot = "Yodao"
if instr(agent, "iaskspider") > 0 then Bot = "Iask"
if len(Bot) > 0 then
Dim oConn, dbPath, adOpenDynamic, adLockPessimistic,sqll
set oConn=server.createobject("ADODB.connection")
oConn.Open
"DBQ="+server.mappath("./zhizhu/bot.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Dim oRS
set oRS=Server.Createobject("ADODB.Recordset")
sqll="select * from bot"
oRS.open sqll, oConn,2,2
oRS.AddNew
oRS("bot") = bot
oRS("shijian") = now()
oRS("url") = GetLocationURL
oRS.Update
oRS.Close
oConn.close
end if
end function
%>
<%call spiderbot()%>
这个用来记录搜索站的蜘蛛,从而写入到名为 bot.mdb的数据库里
<% dim conn,rs,connstr
connstr="DBQ="+server.mappath("bot.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
set rs=server.createobject("adodb.recordset")
sql="select * from bot order by id desc"
rs.open sql,conn,1,1
%>
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<style type="text/css">
<!--
body,td,th {
font-size: 12px;
border: 1px solid #CCCCCC;
}
p {
margin: 0 0 5px 0;
}
-->
</style>
</head>
<body>
<table width="60%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="20" height="30">ID</td>
<td>蜘蛛</td>
<td>来访时间</td>
<td>页面URL</td>
</tr>
<%do while not rs.eof %>
<tr>
<td><%=rs("id")%></td>
<td><%=rs("bot")%></td>
<td><%=rs("shijian")%></td>
<td><%=rs("url")%></td>
</tr>
<%rs.movenext
loop
rs.close
%>
</table>
</body>
</html>
<% set rs=nothing
conn.close
set conn=nothing
%>
以上代码为读取bot.mdb数据库中的蜘蛛访问数据
只能读取,不能删除
:-)。