2023年软考程序员初级辅导资料大全_第1页
2023年软考程序员初级辅导资料大全_第2页
2023年软考程序员初级辅导资料大全_第3页
2023年软考程序员初级辅导资料大全_第4页
2023年软考程序员初级辅导资料大全_第5页
已阅读5页,还剩222页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据窗口自适应打印纸张大小

函数名:f_dw_Zoom

WrittenbyVial.Z

参数:

datawindowdw_print-->要打印I为数据窗口

integernMinZoom->极限缩小比例(缩小范围不能太大,否则不清晰)

返回值:

-1error

0找不到合适口勺值

>0找到"勺合理值

作用:

纸张大小满足数据窗口口勺规定,返回100;

当数据窗口宽度太大,元法在一页纸张上打印时,该程序寻找一种最佳缩小比例值,

使得数据窗口口勺内容恰好能在目前设定的J纸张下打卬出来。

如窗口缩小到85%可以在一页上打印时,返回值为85

*/

ifnotlsValid(dw_print)then

return-1

endif

dw_print.object.datawindoiA/.print.preview=true/*预览模式必须打开*/

dw_print.SetRedraw(FALSE)/*调整放大比例过程中,停止重绘控件,节省程序时间*/

stringls_H_Page/*水平打印占据日勺页数*/

stringls_zoom/*设定的缩小比例整数值*/

Integerli_max=100/*从白,分百大小开始测试*/

integerli_min/*极限缩小值,最多缩小到nn%*/

Integerli_use/*目前测试值*/

Integerli_OK=0/*最优可用值*/

Integerli_count=0/*算法循环执行H勺次数*/

li_min=nMinZoom产赋最小测试值*/

li.use=li_max/*从原始大小(100)开始测试。逐渐缩小放大比例*/

dowhileli_min<=li_max

li_count++

/*调整zoom值,并测试目前宽度打印时横向所占的面数*/

ls_zoom=string(li_use)

dw_print.modify("datawindow.zoom="+ls_zoom)

ls_H_Page=dw_print.describe(

evaluate('PageCountAcrossi)',"+string(dw_print.object.datawindow.firstrowonpage)+")")

iflnteger(ls_H_Page)=1then/*一页足以打印出来*/

li_OK=li_use/*记录这个可用的缩小比例*/

li_min=li_use+1

else

li_max=li_use-1

endif

choosecaselimax-limin

caseIS<0

exit

case0

li_use=li_min

case1

li_use=li_min

caseelse

li_use=lnt((li_max+li_min)/2)/*不不小于等于的I最小整数*/

endchoose

loop

/*还原窗口原大小*/

ifli_OK<>lOOthen

dw_print.modify("datawindow.zoom=100")

endif

dw_print.object.datawindo^.print.preview=false

dw_print.SetRedraw(TRUE)/*恢复重绘控件*/

returnli_OK

使用框架跨域运行不丢失session的措施

首先阐叨原理:

系统是认一种一种程序范围H勺,一般来说,一种IE默认为一种程序范围.

框架由于有了跨域的内容,因此它首先默认的是框架程序自身的程序范围,这样使得框架

内的程序范围得不到确认.

为了让这个IE默认为框架内日勺程序范围,因此我使用了多次跳转.

首先,跳出本框架,进入•种无框架的需要session值的网站页面(就叫它B服务器的页面),

并在这个页面中生成一种session以便系统自动生成一种session。然后乂跳|可到有框架H勺页

面.由于系统已经为这个IE生成了一种session。因此只要不关掉这个IE,系统一直认为这个IE

是本程序范围H勺.这样,再次生成的session值就得以在这个ID中生存下来.

也就到达了骗过系统的目的.

再补充•点,二次跳转使用了不一样的方式,原因是我需要把框架外的信息丢弃,而要保

留框架内的信息.

而不-•样H勺跳转方式会丢弃或保留跳转前的信息日勺。

程序实现方式:

文献1:

框架文献:index.htm(运行在服务器A±)

<html>

<head>

<metaHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312">

奇豪l'】业</title>

</head>

<framesetrows="l,*"border=0frameborder="0">

<framename="winBackLoad"scrolling="no"noresizetarget="mainwebl"

src="default_top.htm">

<framename="mainwebl"src=""scrolling="auto">

<noframes>

<body>

<p>此网页使用了框架,但您的J浏览器不支持框架。</p>

</body>

</noframes>

</frameset>

</html>

文献2:index.asp(运行在服务器B上,作用跳转和生成sessionlD)

<script>

if(top.location!==self.location){

top.location=self.location;

)

〃这个JSH勺目口勺是跳出框架运行

</script>

<%

ifsession("xm2")=,H,then

session("xm2")="eee”

'上面这一句日勺目H勺只是为了使用session,让系统为这个IE生成一种sessionlD,并且判断

一下是不是已经跳转过,省得引起死循环。

%>

<METAHTTP-EQUIV=REFRESHCONTENT="0;URL=',">

<%

,上面这一句是回到框架,注意:只能用上面这个跳转口勺措施,别用下面的跳转措施。

else

Response.Redirect"index2.asp"

'上面一句才是真正地跳转运行服务器B上的程序!注意:也只能用这措施跳!

endif%>

通过以上日勺跳转,本IE已经有了服务器B上日勺session。也就是说,框架虽然是在服务

器A上的主框架运行,但士可以保证服务器B上的session不丢失,到达跨域运行的目的。

使用MD5变换算法防穷举(冲撞)破译密码

MD5是在Web应用程序中最常用时密码加密算法。由于MD5是不可逆的,因而通过MD5

计算得到后的I密文,不能通过逆向算法得到原文。

回忆在Web应用程序中使用MD5加密文本密码的初衷,就是为了防止数据库中保留口勺

密码不幸泄露后被直接获得。但袭击者不仅拥有数据量巨大口勺密码字典,并且建立了诸多

MD5原文/密文对照数据库,能迅速地找到常用密码的MD5密文,是破译MD5密文的高效

途径。然而,MD5密文数据库所使用卧J是最常规於JMD5加密算法:原文->MD5-->密文。因

此,我们可以使用变换H勺MD5算法,使现成的MD5密文数据库无所作为。

下面演示某些变换算法的例子((((((((当然,在其他日勺Web开发语言中,也大同小异,完

全能得到相似口勺成果。

变换一:循环MD5

最轻易理解的变换就是对一种密码进行多次H勺MD5运算。自定义一种函数,它接受

$data和$1由05两个形参,第一种是要加密的密码,第二个是反复加密的次数。实现这种变换

有两种算法

<?php

〃迭代算法

functionmd5_l_l($data,$times=32)

(

〃循环使用MD5

for($i=0;$i<$times;$i++){

$data=md5($data);

)

return$data;

〃递归算法

functionmd5_l_2($data,$times=32)

if($times>0){

$data=md5($data);

$times-;

returnmd5_l_2($data,$times);〃实现递归

}else{

return$data;

)

)

?>

变换二:密文分割MD5

尽管顾客口勺密码是不确定日勺字符串,不过只要通过一次MD5运算后,就会得到一种由

32个字符构成H勺字符串,这时可以再针对这个定长字符串变换。有点BT的算法是,把这段

密文分割成若干段,对每段都进行一次MD5运算,然后把这堆密文连成一种超长的字符串,

最终再进行一次MD5运算,得到仍然是长度为32位的密文。

<?php

〃把密文分割成两段,每段16个字符

functionmd5_2_l($data)

(

〃先把密码加密成长度为32字符的密文

$data=md5($data);

〃把密码分割成两段

$left=substr($data,0,16);

$right=substr($data,16,16);

〃分别加密后再合并

$data=md5($left).md5($right);

〃最终把长字串再加密一次,成为32字符密文

returnmd5($data);

)

〃把密文分割成32段,每段1个字符

functionmd5_2_2($data)

(

$data=md5($data);

〃循环地截取密文中H勺每个字符并进行加密、连接

for($i=0;$i<32;$i++){

$data.=md5($data{$i});

)

〃这时$data长度为1024个字符,再进行一次MD5运算

returnmd5($data);

)

当然,这种密文分割的详细算法是数之不尽的,例如可以把

原密文分割成16段每段两字符、8段每段4字符,或者每一

段的字符数不相等……

变换三:附加字符串干涉

在加密过程的一种环节中,附加一种内容确定的字符串

(例如说顾客名),干涉被加密的数据。不可以用随机字串,

由于这样会使原算法无法重现。这种算法在某些状况下是很

具有优势的,例如说用于大量的顾客密码加密,可以把顾客

名作为附加干涉字串,这样袭击者就算懂得你的算法,也很

难从他们手中的字典中一下子生成海量的对照表,然后大量

地破译顾客密码,只能有针对性的穷举为数不多的顾客。

<?php

〃附加字符串在原数据的尾部

functionmd5_3_l($data,$append)

(

returnmd5($data.$append);

)

〃附加字符串在原数据的头部

functionmd5_3_2($data,Sappend)

returnmd5($append.$data);

)

//附加字符串在原数据的头尾

functionmd5_3_3($data,$append)

(

returnmd5($append.$data.$append);

)

?>

变换四:大小写变换干涉

由于PHP所提供的md5()函数返回时密文中的英文字

母所有都是小写的,因此我们可以把它们所有转为大写,然

后再进行一次MD5运算。

<?php

functionmd5_4($data)

(

〃先得到密码的密文

$data=md5($data);

〃再把密文中的英文母所有转为大写

$data=strtotime($data);

〃最终再进行一次MD5运算并返回

returnmd5($data);

)

?>

变换五:字符串次序干涉

把MD5运算后的密文字符串的次序调转后,再进行一

次MD5运算。

<?php

functionmd5_5($data)

{

〃得到数据的密文

$data=md5($data);

〃再把密文字符串的I字符次序调转

$data=strrev($data);

〃最终再进行一次MD5运算并返回

returnmd5($data);

)

?>

变换六、变换七、变换八……

MD5变换算法是数之不尽的,甚至不必自己再去发明,

就用上面的五个互相组合就可以搞出很BT的算法。例如说

先循环加密后再分割,并在每一段上附加一种字符串再分别

加密,然后变换大小写并颠倒字符串次序后连成一种长字符

串再进行MD5运算……

假如真的很不幸,由于某些漏洞,例如说SQLInjection

或者文献系统中的数据库被下载而异致顾客密码数据暴露,

那么MD5变换算法就能大大地增长破译出密码原文的难度,

首先就是使网上诸多的MD5原文/密文对照数据库(要懂得,

这是破译MD5最高效的措施)没有用了,然后就是使袭击

者用常规算法去穷举一串由变换算法得到的密文而搞得焦

头烂额。当然,MD5变换算法尤其合用于非开源的Web程序

使用,虽说用在开源的程序中优势会被减弱(大家都懂得算

法),不过也能克制MD5原文/密文对照数据库的作用。要

进行这些复杂的变换运算,当然就要花费的更多的系统开销

了,然而对于安全性规定很严格的系统来说,多付出某些来

换取高一点的安全性,是完全值得的。

使用Java范型需要注意的地方

1.静态措施要想范化,需要指定其类型参数

2、非范化类型中II勺实例措施要想范化,也需要制定其类型参数。

3.范化类型中"勺实力措施可以直接使用其类型自身II勺类型参数。

4.范型不是协变U勺,即List<Integer〉不是List<Number>lft子类。

5、不能实例化范型类型的数组,即newList<String>[3]是不合法的,提醒除非类型参数是一

种未绑定的通配符,即newListv?>[3]是合法W、J。

6.构造延迟,在代码编写时我们不能通过类型参数来构造一种该类型的实例,原因是我们不

懂得怎样构造,类型参数的实际类型是在运行时确定的。

7、对于注意5所描述的问题我们有一种处理措施是List<String>list=(List<String>[])new

Objects;不过假如是运行时建立数组呢,类型信息是运行时确定口勺,那就换种写法T[]

tarray=(T口)newObject[3];

8、上面的数组构造是不被推荐的,最佳H勺措施是将类型信息传递到措施中,如method

(Class<V>type){V[]array=(V[])Array.newlnstance(type,length);},可以参照ArrayList

类的JtoArray(T[]a)措施日勺实现。

9、构造通配符引用,假如set是一种Setv?>类型,则

Set<?>set2=newHashSet<?>(set);是不合法的L改

成Set<?>set2=newHashSet<Object>(set);就合法了。

使用C#编写查询IP段功能的程序

本文将通过一种实例来向大家讲解怎样使用c#来编写一种具有查询IP段功能的小程序。

重要功能:查询一种IP所有的IP段.

关键:从Byte数组到ulong时转换出来日勺数字和IPAddress.Address返回值的是不一样样

H勺.

如下是引用片段:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Net;

namespaceIPUtility

(

classProgram

(

staticvoidMain(stringJargs)

(

IPRangeManageirm=newIPRangeManage();

,,

irm.Add(newIPRange("^^J$","55"));

irm.Add(newIPRange("石家庄",”",“55”));

irm.Add(newIPRangefWllj","","55"));

irm.Add(newIPRange(“保定","”,”55"));

Console.WriteLine(irmSearch("").Name);

Console.ReadLine();

}

)

publicclassIPRange

(

privatestringName=string.Empty;

privateulong_BeginlP=0;

privateulong_EndlP=lnt32.MaxValue;

/**////

〃/IP段名称

///

publicstringName

(

get{return_Name;}

set{_Name=value;}

}

/**////

III?始IP

III

publiculongBeginIP

(

get{return_BeginlP;}

set{_BeginlP=value;}

)

/**////

III?束IP

///

publiculongEndIP

(

get{return_EndlP;}

set{_EndlP=value;}

)

/**////

〃/此中段的范?

III

publiculongRange

(

get

(

returnEndIP-BeginIP;

}

)

publicIPRangefstringname,stringipBegin,stringipEnd)

(

this.Name=name;

this.BeginIP=IP2A(ipBegin);

this.EndlP=IP2A(ipEnd);

)

publicstaticulongIP2A(stringip)

byte[]bytes=IPAddress.Parse(ip).GetAddressBytes();

ulongret=0;

foreach(bytebinbytes)

(

ret«=8;

ret|=b;

)

returnret;

)

publicstaticintCompare(IPRangex,IPRangey)

(

if(x.Range==y.Range)

return0;

elseif(x.Range>y.Range)

return1;

elsereturn-1;

)

}

publicclassIPRangeManage

(

publicIPRangeManage()

()

privateList<IPRange>_IPRangeList=newList<IPRange>();

privatebool_NeedSort=true;

publicvoidAdd(IPRangeipRange)

(

JPRangeList.Add(ipRange);

_NeedSort=true;

)

privatevoidSort()

(

if(_NeedSort)

(

_IPRangeList.Sort(newComparison(IPRange.Compare));

)

)

publicIPRangeSearch(stringipString)

(

ulongip=IPRange.IP2A(ipString);

this.Sort();

foreach(IPRangeirinJPRangeList)

(

if(ir.BeginIP<=ip&&ir.EndIP>=ip)

(

returnir;

)

)

returnnull;

)

}

)

设计模式不是什么很高深药东西,有了这些知识大胆地学习吧。诸多人说,看了诸多设计模

式的文章,为何就是看不懂呢?我觉得原因也许有两个,第一就是你没有花时间认真看,

笫二就是看的文章不适合作为切入点。不管学习什么,切入点非常重要,假如切入点不是那

么平易近人的话很也许会把你拒之门外,对于初学者来说从实例切入最合适。最佳是能碰到

自己做过的项目的实例作为切入点,这样你一比较就懂得为何设计模式好了。

假如要把设计模式口勺学习境界分一下级的话,我这样分:

??第一重????能看懂设计模式的文章

??第二重????能自己写一种设计模式H勺骨架

??笫三重????能自己编一种新的运用设计模式的例子

??第四重:能在写代码的时候想到似乎有设计模式适合??在翻阅资料后找到了这种

设计模式

??第五重????在理解项目的需求后就能意识到哪里可以使用哪种设计模式进行优化

??第六重:完全掌握了设计模式日勺精髓??灵活使用多种设计模式以及其变种

不管怎么样,多看多做多替代才是学习日勺措施,他人举例十个都不及自己做一种例子,被动

十个原则都不及自己体会出一种原则。每一种设计模式虽然均有一种骨架,不过也不必过于

强调这个形式,诸多时候根据自己的需求简化•点,变化•点,或者混杂某些其他的设计模

式,只要能实现目的I了,也是一种不错的选择。

诸多人会觉得这样多种设计模式没有几种能用得上。我觉得这不是什么问题,用不上那就用

不上,这些设计模式是大师经历无数大型项目后的精摘,假如能在自己做的一种小项目中用

上两三个就很不错了,用上二三十个的项目绝对是怪胎。用不上千万别强求,否则既不利于

项目的可维护性又增长了工作量。

尚有诸多人会觉得这些设计模式诸多都是相似的。并且每个人H勺感觉还不•样样,有人觉得

A和B很相似,有人却觉得A和B很好辨别,不过B和C却很相似啊。感觉很好辨别,阐明

你看准设计模式日勺着重点的,感觉同样阐明你看到日勺还是它的形。双胞胎虽然形同样,不过

神肯定不一样样H勺,只要认准设计模式处理H勺问题,就不会看错。

有关本系列文章

本来这些内容都是用来进行企业内部每周知识分享活动丛J,既然有某些内容了,想想不妨就

整顿一下贴出来吧。也正由于这个原因,文章中的某些例子都基于团体内部组员所能理解11勺

某些项目,也许这些项目对大家来说比较陌生,不过好处是例子相对比较贴近实际一点。本

系列一共有20篇左右,除了简介23种GOF设计模式中常用的一部分之外(某些设计模式的

思想在C#语言中有了更简朴的实现,某些设计模式不是很常用)还也许会简介某些其他有用

的设计模式。在这些文章中,我不会过多去说某些理论上的东西,也不会有构造图(这些内

容网上到处都是),所有的内容都是围绕相对实际例子展开。我想,只有这样才能更快H勺吸

取设计模式日勺神而不是其形。在看文章的时候提议你结合《设计模式》一书以及博客园日勺其

他设计模式有关文章一起看,这样才能对设计模式理解的全面和充足一点。

每一篇文章都会有如卜部分:

??意图:抄设计模式一书啊??由于意图实在是太重

要??因此不得不首先列出。??

??场景????以一种实际的场景来阐明为何要引入设

计模式。

使用C#编写DES加密程序的framework

这个例子中演示了怎样使用C#中的加密包进行DES算法加密,由于NGWNET中带的协助实

在是简朴,和没有同样,呵呵,不过大家可以借助这个例子一窥DES加密的使用方法。

des_demo.cs代码如下:

usingSystem;

usingSystem.Security.Cryptography;

usingSystem.10;

usingSystem.Text;

publicclassEncryptStringDES{

publicstaticvoidMain(String[]args){

if(args.Length<1){

Console.WriteLinef'Usage:des_demo<string-to-encrypt>"/args[0]);

return;

)

〃使用UTF8函数加密输入参数

UTF8Encodingutf8Encoding=newUTF8Encoding();

byte[]inputByteArray=utf8Encoding.GetBytes(args[0].ToCharArray());

//方式■:调用默认的DES实现措施DES_CSP.

DESdes=DES.Create();

//方式二:直接使用DES_CSP()实现DES的实体

//DES_CSPDES=newDES_CSP();

//初始化DES加密的密钥和一种随机的、8比特的初始化向量(IV)

Byte[]key={0x01,0x23,0x45,0x67,0x89,Oxab,Oxcd,Oxef};

Byte[]IV={0x12,0x34,0x56,0x78,0x90zOxab,OxcdzOxef};

des.Key=key;

des.IV=IV;

//建立加密流

SymmetricStreamEncryptorsse=des.CreateEncryptor(|;

〃使用CryptoMemoryStream措施获取加密过程日勺输出

CryptoMemoryStreamcms=newCryptoMemoryStream();

//将SymmetricStreamEncryptor•流中Mj加密数据输出到CryptoMemoryStream中

sse.SetSink(cms);

//加密完毕,将成果输出到控制台

sse.Write(inputByteArray);

sse.CloseStream();

//获取加密数据

byte[]encryptedData=cms.Data;

//输出加密后成果

Console.WriteLine("加密成果:");

for(inti=0;i<encryptedData.Length;i++){

Console.Write("{0:X2}\encryptedData[i]);

)

Console.WriteLine();

〃上面演示了怎样进行加密,下面演示怎样进行解密

SymmetricStreamDecryptorssd=des.CreateDecryptori);

cms=newCryptoMemoryStream();

ssd.SetSink(cms);

ssd.Write(encryptedDcta);

ssd.CloseStream();

byte[]decryptedData=cms.Data;

char[]decryptedCharArray=utf8Encoding.GetChars(decryptedData);

Console.WriteLine("解密后数据:");

Console.Write(decryptedCharArray);

Console.WriteLine();

)

}

编译:

D:\csharp>cscdes_demo.cs

Microsoft(R)C#CompilerVersion7.00.8905(NGWSruntime.14.1812.10]

Copyright(C)MicrosoftCorp.Allrightsreserved.

运行实例:

D:\csharpxJes_demo.exe使用C#编写DES加密程序J、Jframework

加密成果:

3D2264C657DIC4C3CF77CE2FDOEl782A4DED7AA883F9OE14ElBA38

7B06418DB5E93F000DC328DIF96D174B6EA7416840

解密后数据:

使用C#编写DES加密程序的framework

使用ASP重启服务器

大家懂得直接使用ASP是不可以重启服务器H勺,这时我们需要制作•种组件来实现功能,

ASP通过这个组件调用系统API,然后按照不一样H勺重启和关机方式进行操作!

下面先说COMH勺制作,在VB中新建一工程,当然是AceiveXdll的!

1)先修改工程属性,生工程属性窗口将工程名称改为system,在类模块窗口将模块名

称改为contral,保留工程;

2)然后添加一种模块,用米申明需要使用的API和常数!下面是模块中的内容!

DeclareFunctionExitWindowsExLib"user32"(ByVaiuFlagsAsLong,ByVaidwReservedAs

Long)AsLong

3)在类模块中输入下列代码:

PublicFunctionreboot(atypeAsVariant)

t&=ExitWindowsEx(l,atype)

EndFunction

该函数需要传入一种参数,用来控制启动方式,这个参数是从ASP程序中传入於J,等一下

就可以看到详细U勺使用措施!

编写完上面的代码,保留工程,将工程编译为system.dll。下面就写ASP程序!

ASP中的代码非常简朴:

<%

atype=request("atype")

setsys=server.CreateObject("system.contral")

sys.reboot(atype)

%>

其中atype可以使用0、1、2、4,0、1和4均为关机,2用来重启。写完后执行ASP就

可以了!

JAVA6.0之后,其中JDK自带有个轻量级/、Jwebservice服务器。假如你比较细心一定发

目前你安装javaII勺途径下,有javawebserviceI向示例代码。

java开发过webservice,不过当时用了一种叩acheFaxis开源项目。假如axis夜进化

了,不过java自带有何须舍近求远呢。最简朴javawebservice范例过程记录下来,

netbeans6,首先建立一种java应用程序工程,名为

WebServiceso建立一种服务端程序。

packageWebServices;

importjavax.jws.*;

importjavax.xmLws.Endpoint

/**

*@authorhecm

V

@WebService(targetNamespace="",

serviceName="HelloService")

publicclassWSProvider

(

//@WebResult(name="Greetings'1)//自定义该措

施返回值在WSDL中有关的描述

@WebMethod(action=nsayHin,operationName="

sayHin)

publicStringsayHi(@WebParam(name="MyName

")Stringname)

return“HiJ+name;//@WebParam是自定义参数

name在WSDL中有关的描述

@Oneway//表明该服务措施是单向陶既没有返回值,

也不应当申明检查异常

@WebMethod(action="printSystemTime\

operationName="printSystemTime")

〃自定义该措施在WSDL中有关的描述

publicvoidprintTime()

(

System.out.println(System.currentTimeMillis());

)

publicstaticvoidmain(String[]args)

(

ThreadwsPublisher=newThread(new

WSPublisherQ);

wsPublisher.start。;

)

privatestaticclassWSPublisherimplements

Runnable

(

publicvoidrun()

(

//公布WSProvider到http://

tocalhost8888/hechangmin/WSProvider这个地址>之前

必须调用wsgen命令

//生成服务类WSProvider的支持类,命令如下:

//wsgen-cp.WebServices.WSProvider

Endpoint.publish(Mhttp://tocalhost8888/JAVA-HE/WSPr

ovidern,newWSProviderQ);

)

)

实战JDK6.0自带webservice

当然建立对应的包,就不用说了。

然后编译文献。

进入命令提醒符下,进入classes目录,运行:wsgen

-cp.WebServices.WSProvider

可以看到将刚刚的class生成了几种java文献和class

文献。

目前要做的是公布ws到

ht^p://k)calhost8888/chinajash/WSProvider

而实际上的动作就是:

Endpoint.publish("http://tocalhost8888/chinajash/WSP

roviderr\newWSProviderQ);

当然直接运行WSProvider。

然后输入

http://k)calhost8888/JAVA-HE/WSProvider?wsdl

就已经查看到生成的Iwsdl(webservice描述语言)。

也就是服务端就0K了。

保持运行。编写一种测试客户端:

首先选择项目,右键新建web服务客户端。其中wsurl

填入刚刚生成的wsdl地址:

http://tocalhost8888/JAVA-HE/WSProvider?wsdl

(实际上:和wsimport

http://localhost8888/JAVA-HE/WSProvider?wsdl同样的

效果)

产生一种效果:在classes下按照之前指定的名字空

间产生的包下(目录构造)生成了7个协助classo

然后我们建立一种包client建立测试文献:

/*

*Tochangethistemplate,chooseTools|Templates

*andopenthetemplateintheeditor.

*/

packageclient

importnet.btogjava.java_he.*;

/**

*

*@authorhecm

*/

publicclassTest{

publicstaticvoidmain(Stringargs[])

(

HelloServicehs=newHelloServiceQ;

WSProviderws=hs.getWSProviderPortQ;

System.out.println(ws.sayHi("hechangmin"));

ws.printSystemTime();

)

运行这个测试类:

Hthechangmin

输出了。顺利完毕!

提醒:一公布的地址最佳写成可配置。尚有就是wsdl中

会严格按照你指定的url来访问,例如你指定的

那么你用本机IP的时候也许并不能顺利访问。

实现基于IDEA算法的加密工具

/*-文献名:idea.c*/

/*-*/

/*-功能:运用idea加密算法实现文献H勺加密*/

/*-*/

/*-阐明:*/

/*-这是运用IDEA算法实现R勺文献加密工具可以在怯律容许范围内以非商*/

/*-业形式自由使用,该程序的J所有权利由作者吴真保留*/

/*-7

/*-版本号:1.0.0(.6)*/

/*-7

#include

#include

#include

#include

#include

#include"idea.h"

typedefintINT32;

typedefcharINT8;

typedefunsignedcharUL0NG8;

typedefunsignedshortUL0NG16;

typedefunsignedlongULONG32;

#defineSUCCESS0

^defineFAIL-1

#defineWZ_COMMEND_NUM4

^defineWZUSEHELPNUM7

#defineREADFILESIZE512/*一次从文献中读取多少字节,可以根据内存的大小调整*/

INT32file_enc(FILE*readfile,FILE*writefile/ULONG8*key);/*加密文献*/

INT32file_dec(FILE*readfilefFILE♦writefile,UL0NG8*key);/*解密文献*/

INT32hextofile(ULON38*buf,FILE♦writefile,ULONG32length);/*以16进制写入文献*/

INT32encodehex(ULONG8*tobufzULONG8*frombuf,ULONG32len);/*16进制解码*/

voidwz_printhelp();/*打印协助*/

INT8*WZ_Commend_Help[]=

(

”基于IDEAH勺加密解密工具vl.O"f/*0*/

”追求卓越,勇于创新",

”一著者:吴真一,

IIII

);

INT8*WZ_USE_HELP[]={

"输入5个参数:",

"\tl.可执行文献名*.exe",

"\t2.操作类型1:加密;2:解密工

”\t3.读出数据的文献名*.txt”,

“\t4.写入数据H勺文献名*.txt”,

”\t5.密钥(32字节蜜

II******************************II

);

voidmain(INT32argcJNT8*argv[])

(

INT8*FILENAME1,*FILENAME2;

FILE*fp,*fp2;

ULONG8key[33]={0};/*密钥容器*/

if(argc!=5)

(

wz_printhelp();

return;

)

FILENAMEl=argv[2];

FILENAME2=argv[3];

,

if((fp=fopen(FILENAIVEl;r+b"))==NULL||(fp2=fopen(FILENAME2/"w+b"))==NULL)

(

printf("Can'topenfile\n");

return;

)

memcpy(key,argv(4],strlen(argv[4]));/*获得密钥*/

switch(atoi(argv[l]))

case1:/*加密操作*/

file_enc(fp,fp2,key);

printf("\n\tlDEA加密完毕,密文存于%s文献\n,FILENAME2);

break;

case2:

/*解密*/

file_dec(fpzfp2zkey);

printf("\n\tIDEA解密完毕,明文存于%s文献\n",FILENAME2);

break;

default:

printf("请选择是力口密|解密plesechooseencrypt|deencrypt\n");

break;

)

fclose(fp);

fclose(fp2);

)

INT32hextofile(ULON38*buf,FILE♦writefile,ULONG32length)

(

ULONG32writelen=0;

/*以16进制形式写入文献*/

while(writelen<length)

if(buf[writelen]==0)

fprintf(writefile,"%x",0);

fprintf(writefile,"%x",0);

}

elseif(buffwritelen]<0x10)

(

fprintf(writefile,"%x",0);

fprintf(writefile,"%x",buf[writelen]);

)

else

(

fprintf(writefile,"%x",buf[writelen]);

)

writelen++;

)

returnSUCCESS;

)

INT32file_enc(FILE*readfile,FILE*writefile,ULONG84key)

(

INT32filelen=0,readlen=O,writelen=0;

ULONG32totalfilelen=0;/*记录实际欧J文献的长度

INT32i;

ULONG8readbuf[READFILESIZE]={0};

idea_makekey((ULONG32*)key,outkey);

filelen=fread(readbu;sizeof(INT8),READFILESIZE,readfile);

while(filelen==READFILESIZE)

totalfilelen+=READFILESIZE;

for(i=0;i<READFILESIZE;i+=8)

(

idea_enc((ULONG16*:i&readbuf[i]);/*力口密*/

)

hextofile(readbuf,writefile,READFILESIZE);/*以16进制形式写入文献*/

memset(readbuf,OzREADFILESIZE);

filelen=fread(readbu;sizeoffINT8),READFILESIZE,readfile);

)

/*这是从文献中读出的最终一批数据,长度也许会等于0,因此要先判断*/

if(filelen>0)

(

/*假如从文献中读出的长度不等于0,那么肯定有8个字节以上日勺空间

文献长度存在最终8个字节中*/

totalfilelen+=filelen;

memcpy(&readbuf[READFILESIZE-8],(ULONG8*)&totalfilelen,4);

for(i=0;i<READFILESIZE;i+=8)

(

idea_enc((ULONG16*j&readbuf[i]);/*加密*/

)

hextofile(readbuf,writefile,READFILESIZE);/*以16进制形式写入文献*/

memset(readbuf,0,READFILESIZE);

)

else/*filelen==0*/

memcpy(&readbuf[0],(ULONG8*)&totalfilelen,4);

idea_enc((ULONG16*:i&readbuf[0]);/*力口密*/

hextofile(readbuf,writefile,8);/*以16进制形式写入文献*/

)

returnSUCCESS;

)

INT32file_dec(FILE*readfile,FILE*writefile/ULONG8*key)

(

INT32filelen=0,readlen=0,writelen=0;

ULONG32totalfilelen=0;/*记录实际吊J文献W、J长度*/

INT32i,num;

ULONG8readbuf[READFILESIZE]={0};

ULONG8sendbuf[READFILESIZE*2]={0};

idea_makekey((ULONG32*)key,outkey);

key_decryExp(outkey);

fseek(readfile,-16,SEEK_END);/*最终16个字节的表达文献长度的空间*/

filelen=fread(sendbuf,sizeof(INT8),16,readfile);

encodehex(readbuf,sendbuf,8);

idea_dec((ULONG16*)&readbuf[0]);/*解密*/

得到文献总长*/

memcpy((ULONG8*)&totalfilelen/&readbuf[0],4);/*

memset(readbuf,0,8);

memsettsendbutO,16);

num=totalfilelen/READFILESIZE;/*有几利।READFILESIZE组*/

totalfilelen%=READFILESIZE;

fseek(readfile,O,SEEK_SET);/*跳到文献头*/

while(num-)

(

filelen=fread(sendbuf,sizeof(INT8),READFILESIZE*2,readfile);

encodehex(readbuf,sendbuf,READFILESIZE);

for(i=0;i<READFILESIZE;i+=8)

(

idea_dec((ULONG16*:i&readbuf[i]);/*解密*/

)

writelen=fwrite(readbuf,sizeof(INT8),READFILESIZE,writefile);

memset(readbuf,0,READFILESIZE);

memset(sendbutO,READFILESIZE*2);

)

if(totalfilelen>0)/*最终•块有多出口勺元素*/

(

filelen=fread(sendbuf,sizeoffINT8),READFILESIZE*2,readfile);

encodehex(readbuf,sendbuf,READFILESIZE);

for(i=0;i<READFILESIZE;i+=8)

(

idea_dec((ULONG16*j&readbuf[i]);/*解密*/

)

writelen=fwrite(readbuf,sizeof(INT8),totalfilelen,writefile);

memset(readbuf,0,READFILESIZE);

memset(sendbuf,0,READFIlESIZE*2);

)

returnSUCCESS;

)

INT32encodehex(ULONG8*tobuf,ULONG8*frombuf,ULONG32len)

(

UL0NG8*readfirst=frombuf;

ULONG8*readend=&frombuf[l];

INT8*s;

ULONG8y[2];

ULONG32i;

for(i=0;i<len;i++)

(

y[0]=*readfirst;

y(l]=*readend;

readfirst+=2;

readend+=2;

tobuf[i]=(ULONG8)strtol((INT8*)yz&s,16);

)

returnSUCCESS;

)

voidwz_printhelp()

(

INT32i;

printf("\t");

for(i=0;i<22;i++)

printf(”%c,5);

)

printf("\n");

for(i=0;i<WZ_COMMEND_NUM;i++)

(

printf("\t%c\t%s%c\n"/5zWZ_Commend_Help[i],5);

}

printf("\t");

for(i=0;i<22;i++)

(

printf("%c",5);

)

printf("\n");

for(i=0;i<WZUSEHELPNUM;i++)

(

printf("\t%s\n",WZ_USE_HELP[i]);

)

return;

)

实现和IE浏览器交互的几种措施的简介

1.引言

怎样实现对IE浏览器中对象曰勺操作是一种很有实际意义问题,通过和IE绑定的DLL我

们可以记录IE浏览过的网页的次序,分析顾客的使用行为和模式。我们可以对网页的内容进

行过滤和翻译,可以自动填写网页中常常需要顾客填写叼Form内容等等,我们所有的例子代

码都是通过VC来表达的,采用的原理是通过和IE对象的接口的交互来实现对IE的访问.实

际上是采用COM日勺技术,我们懂得COM是和语言无关的一种二进制对象交互的)模式,因此

实际上我们下面所描述的内容都可以用其他的语言来实现,例如VB,DELPHI,C++Builder等

等。

2.IE实例遍历实现

首先我们来看系统是怎样懂得目前有多少个IE日勺实例在运行。

我们懂得在Windows体系构造下,一种应用程序可以通过操作系统的运行对象表来和

这些应用H勺实例进行交互,不过IE目前H勺实现机制是不在运行对象表中进行注册,因此需要

采用其他的措施。我们懂得可以通过Shellwindows集合来代表属于shell的I目前打开的窗口

的集合,而IE就是属于shell的一种应用程序。

下面我们描述一下用VC实现对目前IE实例的进行遍历II勺措施。IShellWindows是有关

系统shell日勺一种接口,我们可以定义一种如下的接口变量:

SHDocVw::IShellWindowsP:rm_spSHWinds;

然后创立变量口勺实例:

m_spSHWinds.Createhstance

(_uuidof(SHDocVw::ShellWindows));

通过IShellWindows接口II勺措施GetCount

可以得到目前实例的数目:

longnCount=m_spSHWinds->GetCount();

通过IShellWindows接口H勺措施Item

可以得到每一种实例对象

IDispatchP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论