关于作者

用户名:duge0413
笔名:duge0413
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:8
评论个数:2
留言条数:1




Powered by BlogDriver 2.1

Eagle and Snake

 

文章

一个无学历美国名人在世界名校耶鲁的演讲
摘要:Oracle(甲骨文)的CEO Larry.Ellison在耶鲁大学2000届毕业典礼上的演讲 查看全文

- 作者: duge0413 2005年10月14日, 星期五 23:00  回复(0) |  引用(0) 加入博采

工厂模式-简单工厂(设计模式的入门级模式—初级)(转自Linux中国)
摘要:本文综合了《thinking in Design pattern with java》,《Design pattern》,《爪哇语言简单工厂创立性模式介绍》以及我自己的观点,对factory 相关的设计模式进行详细的说明。 查看全文

- 作者: duge0413 2005年05月5日, 星期四 15:46  回复(1) |  引用(0) 加入博采

工厂模式-工厂方法(模式进阶)Linux中国

java2.jpg工厂模式有以下几种形态:
简单工厂(Simple Factory)模式
工厂方法(Factory Method)模式,又称多形性工厂(Polymorphic Factory)模式
抽象工厂(Abstract Factory)模式,又称工具箱(Kit或Toolkit)模式

本文综合了《thinking in Design pattern with java》,《Design pattern》,《爪哇语言简单工厂创立性模式介绍》以及我自己的观点,对factory 相关的设计模式进行详细的说明。

以下详细介绍工厂方法模式

        生疏的语言描述会使你越来越找不到学会工厂模型的方向,这是每个人都会感觉到的。所以我尝试给一篇代码,让大家现品尝一下胜利的果实。如果一次看不明白,不要着急,只要每个几天多看几次,你会感到跳跃性的理解!如果你能模仿这些代码写一些自己的工厂例子,感觉会来得更快。
假设你已经看了《简单工厂》那篇文章,并有了一丝基础,好,让我们继续。

package com.cc;
import java.unit.*;

interface book{
void sayBookName();
void sayBookPrice();
}
/*
书。---(工厂方法的研究代码)
*/
class ChineseBook implements book //中文书
{
private String name;
private int price;
public ChineseBook(){
this.ChineseBook("chinese",10);
}
public ChineseBook(String name,int price)
public void sayBookName(){
System.out.println("i am a chinese book "+name);
}
cc. Channel Pattern
public void sayBookPrice(){
System.out.println("my price is "+price);
}

//继承书店工厂
//
private static class Factory extends BookFactory //内部类的使用
{
protected Book create(){
return new ChineseBook();
}
}
static { //生成1个实例后,就要把这个实例加到工厂中
BookFactory.addFactory("EngishBook",new Factory())//为什么要把工厂 //放到list中呢?便于加载一次以后可直接调用
}
};

class EnglishBook implements book //英文书
{
private String name;
private int price;
public EnglishBook(){
this.EnglishBook("english",10);
}
public EnglishBook(String name,int price)
public void sayBookName(){
System.out.println("i am a english book "+name);
}
public void sayBookPrice(){
System.out.println("my price is "+price);
}

//继承书店工厂
//
private static class Factory extends BookFactory
{
protected Book create(){
return new EnglishBook();
}
}
static { //生成1个实例后,就要把这个实例加到工厂中
BookFactory.addFactory("EngishBook",new Factory())//为什么要把工厂
//放到list中呢?便于加载一次以后可直接调用
cc. Channel Pattern
}
};
abstract class BookFactory
{
protected abstract book create();//这个方法要在具体类中实现
private static Map factories = new HashMap();//工厂map
public static void addFactory(String id,BookFactory f)
{
//加入工厂,将书和创建书的工厂加入到map中,为什么要加入创建书的工厂呢? //因为创建书的工厂有个create()方法,他要具体返回一个实例
factories.put(id,f);
}
public static final Book createBook(String id){//创建书实例,书的名称作 //为参数,传出的是被创建好的Book的实例
if (!factories.containsKey(id))//当工厂中不包含这个类时要装载
{
try{
// Load dynamically 动态装载
Class.forName(id); //怎么加载的?只要直接执行
//这个类,类就会调用static里的语句
}catch(ClassNotFoundException e){
throw new RuntimeException("error"+id);
}
// See if it was put in 看看它是否被装载
if(!factories.containsKey(id))
throw new RuntimeException("Bad shape creation: " + id);
}
return ((BookFactory)factories.get(id)).create();
}
};

public class BookFactory2
{
String bookList[] = {"ChineseBook","EnglishBook","ChineseBook"
,"ChineseBook","EnglishBook"};
List books = new ArrayList();
public void text(){
for (int i=0;i{
books.add(BookFactory.createBook(bookList[i]));
}
Iterator it = Books.iterator();
while(i.hasNext()){
cc. Channel Pattern
Book s = (Book)i.next();
s.sayBookName();
}
}

public static void main(String args[]) {
new BookFactory2().test();
}
};

这是根据《Thinking in pattern》所改造的一个例子,我画了很长时间才把这段代码理解。个人认为工厂方法本没有这么复杂,关键的是其作者用了几个很巧妙的方式,比如createBook()方法、将工厂放入Map、中等等。工厂方法是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给子类去作。工厂类BookFactory 中的createBook()方法本身并不创建new实例,它只返回具体的book实例,以下代码是个关键:

return ((BookFactory)factories.get(id)).create();

        在解剖这个代码,假如id是“chineseBook”那么factories.get(“chineseBook”) 这个代码产生了什么呢?是一个工厂BookFactory的实例,这个实例是在ChineseBook类中创建的,理所应当是一个ChineseFactory实例,只是名字不会叫ChineseFactory,这个实例放到了factories这个Map中,本身也没有名字,通过id识别的。写了这么多,才弄懂了一点点,让我们继续。既然factories.get(id)是一个ChineseFactory实例,那么这个实例调用create()方法,那么返回一个new好的chineseBook实例是谁也不能反对的了。绕了这么多弯子,最后又回来了。很多人会问,为什么这么麻烦呢?这跟简单工厂有什么区别那?

        我也觉得很麻烦,但我知道这是有很多优点的,再理解一下这句话“工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给子类去作。处于工厂方法模式的中心位置上的类甚至都不去接触那一个产品类应当被实例化这种细节。这种进一步抽象化的结果,是这种新的模式可以用来处理更加复杂的情形。”如果不能理解的请看我得解释,“子类决定如何实例化”,而工厂类不参与任何实例化行动,他只是根据参数选择那个子类去实例化。就好比,主板与其他部件如光驱、软驱等等,一旦有升级的需求,更换主板就是最麻烦,主板就相当于工厂类这个枢纽,工厂类枢纽不动最好!

        在何时使用工厂方法呢?这其实是一个很重要的问题,《设计模式》这本书说得很笼统,他说,工厂方法应用于MVC中,我个人对MVC理解比较深刻,但还是不能很好的将工厂方法应用于其中。《程序员》一书中,将工厂模式应用于设计一个SQLBuilder语句生成器中,很有实际意义。我把这段代码给大家。

// SQLBuilder.java
public class SQLBuilder{
private ValueObject vo =null; //这是一个抽象创建器
public SQLBuilder(ValueObject aValueObject){
vo = aValueObject;
}

protect void getInsertSQL( ){
cc. Channel Pattern
// Get meta data
MetaObject mo = vo.getMetaDate(); // 核心部分,vo.getMetaDate()返回具体实例
//
}

public void insert(){
PreparedStatement ps = getInsertSQL();
Ps.executeUpdate();
}

public abstract class ValueObject{
//Create method
public MetaObject getMetaData();
}
public abstract class MetaObject{
}
public class CustomerVO extends ValueObject{
public MetaObject getMetaObject{
return new CustomerMO();
}
}
public class CustomerMO extends MetaObject{
// Methods
//实际上具体上这个类实现比较复杂,包含一系列的Field对象,同时设置字段
//的方法最终由Field类完成。
}
public static void main(String[] args){
CustomerVO cvo = new CustomerVO();
SQLBuilder sql = new SQLBuilder(cvo);
Sql. Insert();
……
}
}

工厂方法是创建型设计模式相对简单的一种,即便如此,我也感到了模式理解起来的可怕程度。给大家一个好的办法,那就是自己写一个模式的例子,然后记下心得,教给下一个朋友。

- 作者: duge0413 2005年05月5日, 星期四 15:45  回复(0) |  引用(0) 加入博采

吴宗宪VS李敖

横睨一世、卓尔不群的李敖,其大起大落的人生经历,犹如一则现代传奇。
从文坛彗星到人人口诛笔伐的大毒草,从论战英雄到十四年牢狱之灾,被查禁的书有九十六种之多,李敖始终以横眉冷对千夫指的倨傲,纵笔所至不检束的文章,虽千万人吾往矣的气魄,坦然面对、顽强对抗。

同时,吴宗宪也是个话题人物,对他骂声不绝于耳,但支持他的人也是遍布各地。骂他的人,理由不外乎是,吴宗宪在主持节目时经常充满情色暗示;而支持他的人,已经将吴宗宪的许多搞笑语言当成口头禅。甚至很多人将他在节目中说过的话整理成册,推出"吴宗宪名言录",例如"长江后浪推前浪,前浪死在沙滩上"等语句,几乎被青少年们捧为至理名言。

李敖和吴宗宪两大名嘴,终于在台湾的JACKY SHOW综艺节目中碰撞了

吴:LANDIES AND GENTLEMENT!欢迎李敖!!大哥请坐,太开心了,来我们现场的观众再来一次热情的鼓励一下!其实李敖,李大哥也是我的一个人偶像了,我个人对于你是从喜欢到推崇,甚至于到模仿,我过去在电视节目里有模仿过你,你知道吗?

李:人表演得还不错,可是当时穿得那件红皮夹克太滥了。

吴:有没有看到啊,人家这样的谈吐跟过去的那个马克吐温一样,非常的有幽默感,然后又不会伤害到人家的自尊。在个人观点上,我觉得你是一个强者,你可以跟我们解释一下,你为什么总是以红色为你的标志呢?


李:因为年纪大了,我是1935年生的,我跟猫王同岁,你知道吧


吴:是,是..........他已经死了


李:喜欢颜色鲜艳一点,所以偶尔买了这么一件,我是不穿名牌的,可是买回来一看才知道它是名牌,这件夹克一万两千块


吴:一万两千块??


李:所以说你当时那件夹克有多滥啊。


吴:他说他这件夹克一万两千多啊,这大概以一个艺人的角度来看,算一件很普通的夹克了。(爆笑)


李:我会报告国税局来查查你的帐噢


吴:我们年轻人有很多问题想问你啊。来,小马第一道题目


马:李敖大哥,一般的民众对你的看法都是认为你属于大男人,而我们吴宗宪先生属于花心男人。所以我今天就想问一下大男人和花心男人一个问题,对你们而言,女人是什么?什么是真正的女人?


李:真正的女人就是你看了她以后,除了身体上一部分硬意外,其他全软了。(观众爆笑)


吴:不要这么大声好不好,我是看到之后会放很大,我是指瞳孔的部分。听说你也曾经公开过找过五个妓女,你又说要灵肉和一,可你找来的又是灵肉不合一的,请问...............


李:你这是断章取义,你忘了我在李敖回忆录里面说的,我是要同时做社会调查。


吴:对,这就跟我有一段时间也经常住在酒店,我也是为了帮助失学少女一样。好第二道题要问你一下。(爆笑)


马:宪哥啊,这么多绯闻当中,你到底愿意承认哪一个啊?


吴:这一点我要提出我的说明是,在演艺圈跟政治圈不一样了,在政治圈是NO NEW IS GOOD NEWS,而在演艺圈就不一样了,NO NEW IS BAD NEWS,没新闻你就完蛋了,代表你不红,有没有人在炒作小马的新闻啊?


马:没有啊。


吴:所以说你不红啊。


马:是,是.............那你到底愿意承认哪一个呢?这是问题的重点


吴:有人老是说我买房子给谁谁的,作为一个男人来讲,其实绯闻不重要,但是要懂得负责任。


马:对,对,对,关于这个负责任啊,宪哥他有自己的想法,他认为不做就不用负责任,做了才要负责任,那你是哪一个有要负责任的?


吴:没有,没有,这一点我跟李大哥想法一样,不做就不要负责,做了就要给钱。


李:其实有的人是不给钱的,像民进党的前主席施明德,他有三不主义:不主动,不拒绝,不负责。我曾经笑他三不主义,我说你不主动的话,你就爬不到美女身上;你不拒绝的话,丑女就爬到你身上;你不负责的话,现在DNA测验,你跑不掉的。(观众爆笑)


吴:太好了,这种说法让我们叹为观止。下一个问题.


马:在爱情当中灵与肉,如果只能选一样,你们会选哪一个?灵还是肉?


李:能选灵就选灵,选不到灵就选肉。


吴:那这一点跟我是相反的,我是先选肉,日后再观察有没有必要选灵。否则先选灵的话,如果日后发现两人合不来,结果肉也没吃到。


李:所以你有绯闻,我没有啊


吴: 我们现在做一个心里测验,性爱心里分析,请问下面哪一个新闻令你最不能接受了


  A:少女被轮暴


  B:离家少女被变态狂奸杀


  C:少女被男友推入火坑接客


  D:清纯少女被强暴


李:我选D


吴:小马,你会选哪一个呢?


马:我也选D.


吴:那么观众朋友肯定会认为我会问飞哥了,其实我会问吉他手,节目好看就好看在这里,变化多端的。然后走到吉他手这边,就问道鼓手这里,请问你会选哪一个?


鼓手:我会选............


吴:但是你的答案我们不听啊


马:宪哥你会选哪个?


吴:我会选择A


马:不会啊,你应该选择和你有关系的,你应该选C啊


吴:干什么啊,说出来。让我们来看看答案。选择A的专况是非常大男人主义,认为女孩子只能和一个男人发生关系。我是这样的人,但是它这个答案是根据我个人的器官所设计的,非常大!男人主义!不好意思噢,个人在构造上异于常人,天赋异常。让我们来看看李大哥的答案:潜意识里淫乱女生的倾向,哪一天你失去理智,可能会去嫖妓。请问李大哥个人对于这个心里测试有什么说法?


李:第一我觉得这个心里测验的分析师本身就是一个性变态,第二我从来就不会失去理智。


吴:对,对,对,这一点我相信,因为他根本没有理智,又怎么可能失去呢?可他说潜意识里有淫乱女生的倾向,这个是怎么回事呢?


李:因为我们人都有虐待狂和被虐待狂的潜意识,这个并不稀奇。就好像小狗咬你一口,你也想要他一口一样。


吴:小狗咬你一口,你也想要它一口?大哥你讲得是热狗吧?下面看我们的题目


马:李敖大哥是属于狂人型的,而我们宪哥是属于那种伶牙俐齿的,那么想问李大哥为什么要参选总统?


李:你们要我谈政治的噢?小心被剪掉噢!其实不为什么就是为了好玩。因为我写李敖大全集一千五百万字数,作李敖节目一千集,可是我觉得都没有像竞选总统一样使我在半年内被媒体注意,来宣传我的理念。


吴:这个我完全同意,因为媒体的力量是非常恐怖的,但是你有没有想过水可以载舟也可以覆舟啊?


李:我们这个船很大,覆不了我。


吴:噢,船很大,是自大吗?


李:很大,也很自大,比你的大


吴:不要这个样子啊!我们只是在做节目而已啊 


李:他就害怕我说比他的大


吴:可是我们现在比的是长度啊!(观众爆笑)我们节目时间比较长。可是你只是为了好玩而竞选,这对于投你选票的老百姓来说,是不是有点.............


李:可是在这个好玩的过程里面,对年轻人的点化是我个人所取得的成就,使他们从受骗的过程中,解脱出来


吴:但是我个人认为第一个蒙受其利的是你个人,媒体的炒作是你身价水涨船高。你知名度大幅上扬,以前你就很红了,像我念中学的时候,最爱看的就是你的书,没有看过你的书等于是和时代脱节,等于是落伍,我这样讲,你会不会觉得很爽?听说你个人现在的主持费涨了10倍啊?


李:我的主持费表面上比你少,骨子里比你多,我只能说到这里了。


吴:请国税局也多加注意!

- 作者: duge0413 2005年05月5日, 星期四 14:45  回复(1) |  引用(0) 加入博采

局域网中无法访问的解决方法(转)
局域网中无法访问的解决方法(转)

局域网内安装了Windows XP的电脑不能与安装了Windows 98的电脑互相访问,安装了Windows XP的电脑与安装了Windows XP的电脑也不能互相通信。在工作站访问服务器时,工作站的“网上邻居”中可以看到服务器的名称,但是点击后却无法看到任何共享内容,或者提示找不到网络径、无权访问等问题,归纳为以下几点: 

在XP首次使用的时候要在网上邻居的属性里面新建一个网络连接进行网络安装向导。 

  1、检查计算机之间的物理连接。 

  网卡是网络连接的基本设备,在桌面计算机中,每个网卡后面的指示灯应该是亮的,这表示连接是正常的。如果不亮,请检查集线器或交换机是打开的,而且每个客户端连接的指示灯都是亮的,这表示链接是正常的。接下来检查网线的水晶头是否接触良好。 

  2、确保所有计算机上都安装了TCP/IP,并且工作正常。 

  在Windows XP中默认安装了TCP/IP。但是,如果出了网络问题想卸载后重新安装TCP/IP就不容易了:在“本地连接”属性中显示的此连接使用下列项目列表中单击Internet协议(TCP/IP)项,您将发现卸载按钮不可用(被禁用)。 
  这是因为传输控制协议/Internet协议(TCP/IP)堆栈是Microsoft XP/ 2003的核心组件,不能删除。在这种情况下,如果需要重新安装TCP/IP以使TCP/IP堆栈恢复为原始状态。可以使用NetShell实用程序重置TCP/IP堆栈,使其恢复到初次安装操作系统时的状态。方法是:在命令提示符后键入以下命令,然后按ENTER键:netsh int ip reset c:\resetlog.txt,其中,Resetlog.txt记录命令结果的日志文件,一定要指定,这里指定了Resetlog.txt日志文件及完整路径。运行此命令的结果与删除并重新安装TCP/IP协议的效果相同。 



    3、使用ping命令测试网络中两台计算机之间的连接: 

  ping其它计算机IP,在命令提示处,键入ping x.x.x.x(其中x.x.x.x是另一台计算机的IP地址),然后按ENTER键。应该可以看到来自另一台计算机的几个答复,如: 

  Reply from x.x.x.x:bytes=32 time<1ms TTL=128 

  如果没有看到这些答复,或者看到"Request timed out",说明本地计算机可能有问题。如果ping命令成功执行,那么您就确定了计算机可以正确连接,可以跳过下一步。如果没有看到这些答复,或者看到"Request timed out",说明本地计算机可能有问题。PING本地IP,如果看到"Request timed out",说明本地计算机可能有问题。 

  4、使用ping命令测试网络中名称解析是否正常 

  ping computername,其中computername是远程计算机的名称。通过ping命令用名称测试计算机连接。确定计算机的名称的方法是:在命令提示处,输入SYSTEMINFO。或者在桌面上右击我的电脑-属性,然后单击计算机名称选项卡。如果看到该命令的成功答复,说明您在计算机之间具有基本连接和名称解析。名称解析跟NETBIOS密切相关,看下面的步骤。 


    5、正确安装网络组件 

  首先右击网上邻居-属性,选择要共享的网卡。把IP设置在局域网的同一个网段上。比如192.168.1.X网段。然后看一下TCP/IP的高级属性中,是否开启NETBIOS。 


在利用WINNT4.0构建的网络系统中,对每一台主机的唯一标识信息是它的NetBIOS名,系统是利用WINS服务、信息广播方式及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,从而实现信息通讯。 


在内部网络系统中(也就是通常我们所说的局域网中),利用NetBIOS名实现信息通讯是非常方便、快捷的。但是在Internet上对一台主机的唯一标识信息是它的FQDN格式的域名(163.com),在Internet是利用DNS标准来实现将域名解析为相应IP地址,WIN2K支持动态DNS,运行活动目录服务的机器可动态地更新DNS表。 


WIN2K网络中可以不再需要WINS服务,但是WIN2K仍然支持WINS,这是由于向后兼容的原因。目前,大多数网络是混合网,既有Win98等系统,又有WINXP/WIN2K等系统,因此需要在TCP/IP协议上捆绑NETBIOS解析计算机名。 

  查看是否选定“文件和打印服务”组件,如果已将其取消选中,“浏览服务”将不绑定到NetBIOS接口。成为备份浏览器并且没有启用“文件和打印共享”的基于Windows的计算机无法将浏览列表与客户机共享。任何将要包括在浏览列表中的计算机也都必须启用“文件和打印共享”。 



    6、启用打印与文件共享。 


    在网上邻居和本地连接属性里可以看到是否安装了打印机与文件共享。验证:如果在网上邻居中看不到自己的机器,说明你没有安装打印机与文件共享。 


    7、启动"计算机浏览器"服务 

  计算机浏览器"服务在网络上维护一个计算机更新列表,并将此列表提供给指定为浏览器的计算机。如果停止了此服务,则既不更新也不维护该列表。 

WIN2K/XP要确保计算机浏览服务正常启动。打开计算机管理->服务和应用程序->服务,在右窗中确保“Computer Browser”没有被停止或禁用。 



    8、运行网络标识向导 


    我的电脑选择“属性”,然后单击“计算机名”选项卡单击“网络 ID”按钮,开始“网络标识向导”:单击“下一步”,选择“本机是商业网络的一部分,用它连接到其他工作着的计算机”;单击“下一步”,选择“公司使用没有域的网络”;单击“下一步”按钮,然后输入你的局域网的工作组名,再次单击“下一步”按钮,最后单击“完成”按钮完成设置。 


    9、Win2k安装NetBEUI协议 


在Win2k中NetBEUI协议是一个高效协议在局域网中使,因此必须安装此协议: 


网上邻居->属性->本地连接->属性---->安装------>协议------->NetBEUI Protocol 



    10、起用Guest(来宾)帐户 

  Windows XP的Guest帐户允许其他人使用你的电脑,但不允许他们访问特定的文件,也不允许他们安装软件。对Windows XP Home Edition计算机或工作组中的Windows XP Professional计算机的所有网络访问都使用来宾帐户。使用net user guest确保为网络访问设置了来宾帐户,如果该帐户是活动的,命令输出中会出现一行类似下面这样的内容:Account active Yes;如果该帐户不是活动的,请使用下面的命令授予来宾帐户网络访问: 

  net user guest /active:yes 



或者打开控制面板->用户帐户或者在管理工具->计算机管理->本地用户和组中打开Guest帐户 


    11、允许Guest(来宾)帐号从网络上访问。 

  在运行里输入gpedit.msc,弹出组策略管理器,在‘计算机配置-Windows设置-本地策略-用户权利指派’中,有“拒绝从网络访问这台计算机”策略阻止从网络访问这台计算机,如果其中有GUEST帐号,解决办法是删除拒绝访问中的GUEST帐号。 



    12、防火墙: 

确保WINXP自带的防火墙没有开启,打开本地连接属性->高级,关掉Internet连接防火墙。如果使用了第三方的防火墙产品,参考其使用手册,确保防火墙没有禁止以下端口的通讯:UDP-137、UDP-138、TCP-139、TCP-445(仅WIN2K及以后的操作系统)。 



Windows XP最新的SP2补丁对ICF做了很大的改进,功能更强大了,ICF有了自己的设置项,安装SP2后,默认情况下,启用ICF防火墙,不允许任何外部主动连接,即使是本地的应用程序要访问网络也需要在许可列表中做设置。 


但是防火墙阻断正常的网络浏览服务通讯,结果是别人在网上邻居中看不到你的计算机,有没有两全其美的办法在开启防火墙的前提下允许浏览服务。 


办法是,如果开启了ICF,打开属性,在服务这栏,选择添加,添加服务的对话框共有四个编辑框,最上边是描述服务名称,以便于记忆,从上到下第二个是应用服务的IP地址或名称,输入127.0.0.1表示本机。 


下面连个是内外端口号,旁边的tcp/udp标示这个端口是udp连接还是tcp连接。 


按照下面的表格输入3个服务 

  名称            协议       端口 

  NetBIOS Name Service    UDP       137 

  NetBIOS Datagram Service UDP       138 

  NetBIOS Session Service   TCP       139 



  137/UDP -- NetBIOS名称服务器,网络基本输入/输出系统(NetBIOS)名称服务器(NBNS)协议是TCP/IP上的NetBIOS (NetBT)协议族的一部分,它在基于NetBIOS名称访问的网络上提供主机名和地址映射方法。 

  138/UDP -- NetBIOS数据报,NetBIOS数据报是TCP/IP上的NetBIOS (NetBT)协议族的一部分,它用于网络登录和浏览。 

  139/TCP -- NetBIOS会话服务,NetBIOS会话服务是TCP/IP上的NetBIOS (NetBT)协议族的一部分,它用于服务器消息块(SMB)、文件共享和打印。 

13、检查RPC、Plug and Play服务已启动,检查相应的系统文件夹的权限,重新注册以下的动态链接库: 

  regsvr32 netshell.dll 

  regsvr32 netcfgx.dll 

  regsvr32 netman.dll 

    14、设置帐号和密码 

  由于WinNT内核的操作系统,在访问远程计算机的时候,好像总是首先尝试用本地的当前用户名和密码来尝试,可能造成无法访问,在这里把用户密码添加进去就可以了。 

    15、多种方法访问“网络计算机” 

  例如要打开网络中名为“Killer”的计算机,其IP地址为192.168.1.8,如果你不清楚其它机器的IP地址,你可以使用“PING计算机名”来获得它的IP地址。 



用计算机名访问,NETBIOS提供的服务。点击“开始”菜单,单击“运行”,在地址栏输入“\Killer”,单击“确定”。 

  用IP地址访问,在地址输入栏中输入“\192.168.1.8”,单击“确定”。 

  用搜索计算机的方法访问,计算机更新列表需要时间,搜索计算机可以加快更新列表。点击“网上邻居”右键中的“搜索计算机”,输入计算机名,点击“立即搜索”,就可以看到你要访问的计算机。直接双击右边计算机名就可以打开它了。 

  用映射驱动器的方法访问,进入DOS方式,输入“NET VIEW \killer”,回车这是查看计算机Killer上有哪些共享文件夹,如D。再输入NET USE Z:\Killer\D将计算机IBM-ZB共享的文件夹D映射为H:盘,在命令提示符下键入“Z:”。你会发现你已经连到Killer计算机上



网上邻居找不到其他计算机的解决方案

如果在网上邻居中能够看到自己的计算机,说明网卡和软件安装均没有问题,可以从以下几个方面寻找原因: 
1. 硬件的问题 
(1) ping其他主机的ip地址,检查其他计算机的连接速度是否正常,如正常,跳至第2步的第4小步,否则进行以下操作. 
(2) 检查机箱背后的网卡提示灯是否闪烁,如果闪烁,一般可以证明本机与集线器的连接正常。否则应当检查网线的两端是否插好,集线器的电源是否打开。 
(3) 检查集线器上端口和其他计算机端口的指示灯是否处于正常状态。如果正常,说明连网设备与计算机的连接没有问题。否则应当检查网线的两端是否已经插好,并用网线测试仪对网线的连同性重新进行测试。 

2.软件设置的问题 
(1) 检查其他计算机的网卡灯是否闪烁,如果网卡灯不亮,可能是网卡没有正确安装,也可能是没有和网络连接设备正常连接。打开“控制面板“----“系统“----“设备管理器“,检查是否有“网络适配器“,或者网络适配器下的设备是否带有“?”或者“!“。如果是,删除该设备,刷新并重新为其安装驱动程序。如果不是,则证明是网络设备没有问题,或者是网线的问题,按照第1步的第2小步所述的方法处理. 
(2) 协议是否安装,选择“控制面板“----“网络“----“配置“,检查是否每台计算机都安装有tcp/ip协议和netbeui协议、IPX/SPX协议。如果没有,添加上述协议。 
(3) IP地址设置是否正确。当只选择安装TCP/IP协议时,该项检查尤为重要。在MS-DOS方式,运行IPCONFIG命令,将显示该机的IP地址和子网掩码(Subnet Mask),检查该ip地址是否和其他计算机在同一网段。需要互访的计算机是否在统一工作组中,如果计算机不在用同一工作组中,那么他将不会出现在网络邻居之中。 
(4) 是否已设置好文件和打印机共享。打开“控制面板“-----“网络“----“配置“----“文件及打印共享“,查看是否选中“允许其他用户访问我的文件“和“允许其他计算机使用我的打印机“复选框,如果没有,选中该选项。 
(5) 是否以用身份登陆,无论是Microsoft网络用户,Microsoft友好登陆还是Windows登陆,在计算机启动时均要求输入用户名和密码,如果不是在输入用户名和密码后按确定登陆Windows98,而是按取消进入,那么他将不会出现在网络邻居之中。检查“开始”----“注销“,看“注销”后是否跟有计算机名,如果显示为“注销。。。“,则表明没有以用户身份登陆。单击“注销“,重新启动WINDOWS,输入用户名和密码,按确定,进入. 
(6) 查找其他计算机。在“开始“----“查找“----“计算机“中,输入另外一台计算机名,进行查找,或者在“资源管理器“----“工具“----“查找“----”计算机“中输入另外一台计算机的名字,如果一切正常,应当能够寻找到对方。 

3.关于解决Windows XP互访问题 
安装了Windows XP的电脑与安装了Windows XP的电脑也不能互相通信。见过很多高手提供的高招,归纳起来有以下4点:一是双方开启GUEST账号,关闭防火墙;二是安装NetBEUI协议;三是查看本地安全策略设置是否禁用了GUEST账号,在运行里输入gpedit.msc,弹出组策略管理器,在‘计算机配置-Windows设置-本地策略-用户权利指派’中,有“拒绝从网络访问这台计算机”策略阻止从网络访问这台计算机,其中居然有GUEST帐号,谁能访问这台计算机。解决办法是删除拒绝访问中的GUEST帐号;四是设置共享文件夹。然而,即便这4点都做到了,有时也仍然解决不了Windows XP的互访问题。因为在Windows XP中要想实现互访,还需设置这一步:在Windows桌面上用右击“我的电脑”,选择“属性”,然后单击“计算机名”选项卡,看看该选项卡中有没有出现你的局域网工作组名称,如“TL2000”等。然后单击“网络ID”按钮,开始“网络标识向导”:单击“下一步”,选择“本机是商业网络的一部分,用它连接到其他工作着的计算机”;单击“下一步”,选择“公司使用没有域的网络”;单击“下一步”按钮,然后输入你的局域网的工作组名,如“TL2000”,再次单击“下一步”按钮,最后单击“完成”按钮完成设置。重新启动计算机后,局域网内的计算机就可以互访了。 
保证网上邻居正常工作的条件 
1.1.网线。双机互连不使用HUB或交换机,用交叉线连接两机;如果使用HUB或者交换机,均用直连线连接至HUB或交换机,保证交换机、网卡状态灯正常。 

1.2.IP协议。WIN98及以后的机器在安装时会默认安装TCP/IP协议,WIN95需要另外安装。在网上邻居->属性(WIN9X/Me)或者网上邻居->属性->本地连接->属性(WIN2K/XP)里可以查看是否安装了TCP/IP协议。 

1.3.IP地址。在TCP/IP属性里设置IP地址、子网掩码和网关,如果有需要可以设置DNS和WINS服务器地址。IP地址推荐设置:192.168.X.X,子网掩码:255.255.255.0。如果你的局域网中有DHCP服务器,选择自动获取地址即可。 
验证方法:在DOS提示符下使用ping x.x.x.x(对方IP地址),如返回如下信息,说明IP设置成功: 

Reply from x.x.x.x(对方IP地址):bytes=32 time<1ms TTL=128 

1.4.NetBIOS over TCP/IP。网上邻居的浏览和通讯要使用NetBIOS协议,该协议是无法被路由器转发的,因此WIN2K及以后的操作系统均提供将NetBIOS协议封装在TCP/IP中的功能。在Win9X/Me系统中,打开网上邻居->属性可以参看是否安装了NetBIOS协议,在Win2K/XP中,打开TCP/IP属性->高级->WINS->NetBIOS设置,选择“启用TCP/IP上的NetBIOS”。 

验证NetBIOS名称解析:使用ping XXXX(对方机器名),如果返回如1.3中的信息,说明NetBIOS协议解析正常。 

1.5.HOST文件。如果在1.4中无法正确解析机器名,可以修改host文件,在WINDOWS目录中搜索HOST关键字,找到后,使用记事本打开host(有的系统为host.sam),在末尾加入如下内容: 

x.x.x.x(对方的IP地址)使用Tab键跳到下一制表列XXXX(对方的机器名) 
存盘退出,注意,如果原文件带有.sam扩展名,要去掉扩展名,才能生效。使用与1.4.同样的方法验证。 


1.6.启用打印与文件共享。在网上邻居和本地连接属性里可以看到是否安装了打印机与文件共享。验证:如果在网上邻居中看不到自己的机器,说明你没有安装打印机与文件共享。 

1.7.启用GUEST用户:WIN2K/XP在工作组模式下要使用Guest用户来允许网络访问,因此要启用Guest用户。打开控制面板->用户帐户或者在管理工具->计算机管理->本地用户和组中打开Guest帐户,如果使用域管理模式,可以忽略这一步。 

1.8.启用计算机浏览服务。WIN2K/XP要确保计算机浏览服务正常启动。打开计算机管理->服务和应用程序->服务,确保“Computer Browser”没有被停止或禁用。 

1.9.防火墙:确保WINXP自带的防火墙没有开启,打开本地连接属性->高级,关掉Internet连接防火墙。如果使用了第三方的防火墙产品,参考其使用手册,确保防火墙没有禁止以下端口的通讯:UDP-137、UDP-138、TCP-139、TCP-445(仅WIN2K及以后的操作系统)。 

1.10.设置共享文件夹和打印机。



网上邻居常见问题

我有时在网上邻居可以看到,有时却一台机都看不到? 
答:Microsoft网络客户必须登录才能看到网上邻居,如果开机时你没有登录而是选取消,那么在网上邻居就一台机都看不到。你可以点开始->注销,重新登录,然后一切就正常了。 

我在网上邻居里只能看到我自己一台机? 
答:一般而言,你的网卡未设置好,或者网线有问题。 

我的网上邻居只能看到一部分机器,而且不能访问OA或上网? 
答:你的机器网卡可能被禁止了。如果你自己乱设了IP地址的话,那就是你应得的报应。你只能写封道歉信给网管了。 

我已经按要求安装了网络组件,但访问网上邻居还是不行? 
答:可以考虑一下NetBui协议,有时NetBui会出现假安装的现象。删除NetBui协议,确定退出,然后再重新安装NetBUI协议一次。 

我可以访问别人的机器,但我在网上邻居看不到自己? 
答:你可能没有安装Microsoft文件及打印机共享。Microsoft网络客户使你可以访问别人,Microsoft文件及打印机共享使别人可以访问你。 

网上邻居还是不行? 
答:协议是相互的,就象一种语言。如果还是不行,考虑一下对方,只有双方的协议都设置正确的话,才会一切正常的。 

F:为什么在网上邻居访问对方提示没有权限 
Q:两台机器都要打开Guest帐户(WIN2K/XP)。 

F:为什么点击对方机器显示无法连接? 
Q:确保ping对方IP和机器名都能够正常返回信息。 

F:为什么在网上邻居看不到对方的机器或者能看到却访问不了? 
Q:按照微软的解释,这种现象有时是正常的,这需要了解网上邻居及其使用的协议NetBIOS的工作原理,参见后面的原理部分。 

F:有的机器开机或关机,别的机器就用不了网上邻居了? 
Q:同上.。 

F:如果不使用网上邻居,还有其它办法方便的访问其它机器? 
Q:可以不打开网上邻居,直接在搜索中搜索对方的IP或者机器名,也可以在运行中输入\\\\x.x.x.x(对方 IP) or XXXX(对方机器名)。(同样会用到NetBIOS协议) 

F:两台机器不在一个工作组中是否可以使用网上邻居? 
Q:可以。 

F:两台机器经过路由器连接,是否可以在网上邻居看到,又是否可以访问呢? 
Q:不能看到,因为路由器不会转发广播(经过设置UDP透传可以),可以使用FAQ2.6.的方法互相访问,但仅限于WIN2K/XP。 

F:为什么Win9X/Me访问不了或者看不到Win2K/XP,而反过来却没有问题呢? 
Q:确认WIN2K/XP打开了Guest帐户,启用了“浏览服务”;Win9X/Me安装了“打印机和文件共享”,NetBIOS解析没有问题,并且双方没有防火墙的阻挡。 

F:为什么访问需要密码? 
Q:确认对方打开了Guest帐户,或者对方没有登陆到域模式。Win9x/Me如果需要登陆到域,不要按Esc取消进入系统

- 作者: duge0413 2005年05月2日, 星期一 13:18  回复(0) |  引用(0) 加入博采

使用JACOB进行Excel读写控制

使用JACOB进行Excel读写控制


[本页面推荐在1024x768分辩率下浏览]
文章类别:Java   
网站目录: 网站首页 —> Java
转载自:www.csdn.net


1、  下载JACOB包:http://danadler.com/jacob/

2、  安装配置

解压jacobBin_17.zip

(1)jacob.dll所在目录放到PATH中

(2)jacob.jar放到CLASSPATH中

3、使用jacob进行Excel控制,下面是我写的一个测试程序代码

 

import com.jacob.com.*;
import com.jacob.activeX.*;

class ExcelTest
{
  private static ActiveXComponent xl;
  private static Object workbooks = null;
  private static Object workbook = null;
  private static Object sheet = null;
  private static String filename =null;
  private static boolean readonly = false;
 
  public static void main(String[] args)
  {
     String file = "f:\\java\\test.xls";
     OpenExcel(file,false);//false为不显示打开Excel
     SetValue("A1","Value","2");
     System.out.println(GetValue("A3"));
     CloseExcel(false);
  }
 
  //打开Excel文档
  private static void OpenExcel(String file,boolean f)
  {
    try
    {
        filename = file;
        xl = new ActiveXComponent("Excel.Application");
        xl.setProperty("Visible", new Variant(f));
        workbooks = xl.getProperty("Workbooks").toDispatch();
         workbook = Dispatch.invoke(workbooks,
                "Open",
                Dispatch.Method,
                                    new Object[]{filename,
                                    new Variant(false),
                                    new Variant(readonly)},//是否以只读方式打开
                                    new int[1] ).toDispatch();
    }catch(Exception e)
    {e.printStackTrace();}
  }
 
  //关闭Excel文档
  private static void CloseExcel(boolean f)
  {
   try
   {   
     Dispatch.call(workbook,"Save");
         Dispatch.call(workbook, "Close", new Variant(f));
      } catch (Exception e) {
         e.printStackTrace();
     } finally {
     xl.invoke("Quit", new Variant[] {});
      }
  }
 
  //写入值
  private static void SetValue(String position,String type,String value)
  {
     sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch(); 
     Object cell = Dispatch.invoke(sheet, "Range",
             Dispatch.Get,
                                    new Object[] {position},
                                    new int[1]).toDispatch();
      Dispatch.put(cell, type, value);
  }

  //读取值  
  private static String GetValue(String position)
  {
    Object cell = Dispatch.invoke(sheet,"Range",Dispatch.Get,new Object[] {position},new int[1]).toDispatch();
  String value = Dispatch.get(cell,"Value").toString();
  
  return value;
  }
}


- 作者: duge0413 2005年04月11日, 星期一 18:15  回复(0) |  引用(0) 加入博采

JACOB技术探讨之一
日期:2004年5月19日 星期三 天气:晴朗 作者:Rookie.Zhang
JACOB技术探讨之一
发表:2004-5-19 8:57:10 出处:你的博客网(yourblog.org)
最近到邮箱一看,发现已经有很多网友在问我关于JACOB的事情了,然而鄙人为了生计、琐事、公事、感情、亲情忙晕了头,想一一回复真的是有些困难了,在此我慢慢分享下我对于JACOB的了解和应用。同时对那些未能回信的朋友表示深深的歉意。
JACOB主http://danadler.com/jacob/index.html
   首先,如果我们要用JACOB至少需要对JNI有些基本的了解,写过一些JNI应用程序,这样我们就不难理解JACOB的运行机制。如果我们熟悉C/C++,更加能够增进我们的理解。下面详细介绍下一个简单COM对象的建立,然后演示在C++中如何调用,明白这一点,我们再结合java本地方法的调用机制,从而透过一个中间C++方法调用这个简单COM对象。
   1。建立一个COM对象,如下,简单的调用MessageBox弹出消息框。
// HelloWorld.cpp : Implementation of CHelloWorld
#include "stdafx.h"
#include "CPlusCOM.h"
#include "HelloWorld.h"

/////////////////////////////////////////////////////////////////////////////
// CHelloWorld


STDMETHODIMP CHelloWorld::SayHelloWorld()
{
// TODO: Add your implementation code here
MessageBox(NULL, "Hello World.", "CPlusCOM.HelloWorld", 1);
return S_OK;
}

该工程在VC6.0中建立一个简单COM,只添加这个接口方法。

    2。然后,我们写一个控制台的C++程序来调用这个COM对象(Client.cpp)
#include <windows.h>
#include "CPlusCOM.h"

const IID IID_IHelloWorld = {0x87A437D2,0x1210,0x4CEC,{0x99,0x67,0xB2,0x75,0x23,0x4C,0x3B,0x64}};
const CLSID CLSID_HelloWorld = {0xCB85B082,0xB040,0x4865,{0x9A,0xEF,0x61,0xCE,0x0E,0xE1,0xAC,0xB1}};
// 这两个常量到MIDL产生的IIDs and CLSIDs声明文件中拷贝出来

int main(int argc, char* argv[]){
CoInitialize(NULL); // Init COM subsystem
IHelloWorld* pHelloWorld;

HRESULT hr = CoCreateInstance(CLSID_HelloWorld, NULL, CLSCTX_ALL, IID_IHelloWorld, (void **)&pHelloWorld);
  
if (SUCCEEDED(hr)) {
  pHelloWorld->SayHelloWorld(); // use the object
}
pHelloWorld->Release(); // free the object
CoUninitialize();
return 0;
}
编译cl Client.cpp /link ole32.lib
生成Client.exe,执行Client.exe,将弹出消息窗口。

    3。编写一个java应用,来调用这个COM,这里需要用到第二步技术。首先我们编写一个包含本地方法的java类。
public class JClient{
static {
  System.loadLibrary("CPlusCOMBridge";
}
static native void CPlusMessageBox();

public static void main(String[] args){
  CPlusMessageBox();
}
}
编译,然后用javah生成本地方法头文件,然后实现本地方法,在本地方法中实现调用COM对象。
#include "JClient.h"
#include "CPlusCOM.h"
#include <windows.h>

const IID IID_IHelloWorld = {0x87A437D2,0x1210,0x4CEC,{0x99,0x67,0xB2,0x75,0x23,0x4C,0x3B,0x64}};
const CLSID CLSID_HelloWorld = {0xCB85B082,0xB040,0x4865,{0x9A,0xEF,0x61,0xCE,0x0E,0xE1,0xAC,0xB1}};

/*
* Class:     JClient
* Method:    CPlusMessageBox
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_JClient_CPlusMessageBox
  (JNIEnv *env, jclass cls){
CoInitialize(NULL); // Init COM subsystem
IHelloWorld* pHelloWorld;

HRESULT hr = CoCreateInstance(CLSID_HelloWorld, NULL, CLSCTX_ALL, IID_IHelloWorld, (void **)&pHelloWorld);
  
if (SUCCEEDED(hr)) {
  pHelloWorld->SayHelloWorld(); // use the object
}
pHelloWorld->Release(); // free the object
CoUninitialize();
}
这个里面方法体与第二步实现是一模一样的。编译中间本地方法
cl JClient.cpp -IE:j2sdk1.4.2include -IE:j2sdk1.4.2includewin32 /LD /link ole32.lib /out:CPlusCOMBridge.dll

最后,我们就可以跑一跑从java调用这个COM了。
这就是整个java调用COM的过程,JACOB其实就是实现了一个通用的Java-COM的桥梁即JAva-COM Bridge。在后面的文章中我们再来探讨JACOB在实际中的应用。

- 作者: duge0413 2005年04月11日, 星期一 18:12  回复(0) |  引用(0) 加入博采

文化差异

=文化差异1=

日本的一家公司要招聘10名员工,经过一段严格的面试,公司从三百多征者中选出了10位佼佼者。

放榜这天,一个叫水原的青年看见榜上没有自己的名字,悲痛欲死,回到家中便要切腹自杀,幸好亲人及时抢救,水原没有死成。

正当水原悲伤之时,从公司却传好消息:

水原的成绩原是名列前矛的,只是由于电脑的错误导致了水原的落选。

正当水原一家人欣喜若望之时,从公司又传来消息:水原被公司除了名。原因很简单,公司老板说:如此小的挫折都受不了,这样的人在公司是不成什么大事的。

 

=文化差异2=

美国的一家公司要招聘10名员工,经过一段严格的面试,公司从三百多征者中选出了10位佼佼者。

放榜这天,一个叫汤姆的青年看见榜上没有自己的名字,悲痛欲死,回到家中便要举枪自尽,幸好亲人及时抢救,汤姆没有死成。

正当汤姆悲伤之时,从公司却传好消息:

汤姆的成级原是名列前矛的,只是由于电脑的错误导致了汤姆的落选。

正当汤姆一家人欣喜若望之时,美国各大州的知名律师都来到汤姆的家中,他们千方百计的鼓励汤姆到法院告这家公司,声称需支付巨大的精神赔赏,并自告奋勇的充当汤姆的律师。

 

=文化差异3=

德国的一家公司要招聘10名员工,过一段严格的面试,公司从三百多征者中选出了10位佼佼者。

放榜这天,一个叫萧恩的青年看见榜上没有自己的名字,悲痛欲死,回到家中便要跳河自尽,幸好亲人及时抢救,萧恩没有死成。

正当萧恩悲伤之时,从公司传来好消息:萧恩的成绩原是名列前矛的,只是由于电脑的错误致了萧恩的落选。

当萧恩欣喜若望之时,萧恩的父母却坚决反对自己的儿子进入这家公司。他们的理由不容置疑:进入这家公司作业效率如此差劲,进入这家公司儿子的成绩毫无益处。

 

=文化差异4=

中国的一家公司要招聘10名员工,经过一段严格的面试,公司从三百多征者中选出了10位佼佼者。

放榜这天,一个叫志强的青年看见榜上没有自己的名字,悲痛欲死,回到家中便要悬梁自尽,幸好亲人及时抢救,志强没有死成。

正当志强悲伤之时,从公司传来好消息:志强的成绩原是名列前矛的,只是由于电脑的错误致了志强的落选。

正当志强欣喜若望之时,志强的父母来到公司,一看到公司老板便跪了下来。他们含泪的说:多亏你救了我儿子,我们家世世代代感谢你的大恩大德!

 

=文化差异5=

台湾的一家公司要招聘10名员工,经过一段严格的面试,公司从三百多征者中选出了10位佼佼者。

放榜这天,一个叫水扁的青年看见榜上没有自己的名字,悲痛欲死,回到家中便要磕药自杀,幸好亲人及时抢救,水扁没有死成。

正当水扁悲伤之时,从公司传来好消息:水扁的成绩原是名列前矛的,只是由于电脑的错误致了水扁的落选。

正当水扁欣喜若望之时,媒体大幅报道并邀请水扁参加各种CALL IN的评论及综艺节目。热烈讨论电脑为何会出错,是否有黑道介入或官商勾结。至于水扁到底有没有去该公司上班,根本没有人关心。


- 作者: duge0413 2005年03月26日, 星期六 00:53  回复(0) |  引用(0) 加入博采