逃出你的肖申克(二)

Posted on

逃出你的肖申克(二):仁者见仁智者见智?从视觉错觉到偏见

By 刘未鹏 – March 15, 2009

《Making Up the Mind》上讲了这么一个简单但深刻的实验:

ambi_sun_up

我们看到这张图片的第一反应是:5个凸的按钮,1个凹的按钮。

现在仅仅将图片上下颠倒一下:

ambi_sun_down

在我们眼中立即就变成了:1个凸的按钮,5个凹的按钮。

为什么同一副图片,仅仅是上下颠倒一下,我们就对其作出了完全不同的解释呢?

我们知道,视觉图像要到达大脑,首先要在视网膜上成像(视网膜上密密麻麻地排布着感光细胞),刺激感光细胞形成的神经电冲动然后经过一系列复杂的神经通路到达视觉皮层。但后续的繁杂步骤其实都是对视网膜上成的像的处理。这里,对我们的讨论而言视网膜不妨可以看作一张感光胶片,重点在于视网膜上的像完全是一张二维图片大脑从图像中提取出来的任何信息都以这张二维图片为原始素材

那么,究竟大脑是怎么从二维图片中看出(推导出)三维的?

其中一个重要的工作就是判定深度。前面的两张图片完全是二维图片,在我们的视网膜上也是二维的。然而大脑却能够从中理解出三维出来,大脑能够判断出一个按钮是“凹”的还是“凸”的。这是怎么办到的?

很简单,假设环境中有光源,并且光源来自上方,那么凸的物体会使其下部出现阴影,凹陷的物体则会在上部出现阴影。于是,图中按钮的下半部出现阴影就意味着按钮是凸的,按钮的上半部出现阴影则代表按钮是凹的。

然而,别忘了,大脑的这个推理成立必须有一个前提,即光线从上方照下来,如果光线从下方照下来的话,一切就反过来了,凸的物体将会使其上部呈现阴影,凹的物体将会使其下部呈现阴影。因此同样的一副图片如果假设光线从下方照耀的话,原来看成凸的物体就应该看成凹的,原来看成凹的就应该看成凸的。

那么,回到我们的第一副图片,你能够看着第一副图片并假想光线从下方照下来,进而把原来凸的按钮看成凹的吗?事实证明这很难,但我们可以做一个等价的事情——将图片上下颠倒一下:考虑到我们总是假设光线从上方照耀以及按钮的上下对称性,颠倒原图就相当于对原来的图片而言假设光线从“下方”照上去了。

我们发现(上文第二张图),一旦颠倒图片之后,果然凹凸就换位了

发布Java程序为Windows(Linux)服务[Java Service Wrapper]

Posted on

发布Java程序为Windows(Linux)服务[Java Service Wrapper] - 点点知识小屋 - ITeye技术网站

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼

招聘 搜索

您还未登录 ! 登录 注册

点点知识小屋

发布Java程序为Windows(Linux)服务[Java Service Wrapper] **

博客分类:

下载Windows版本:(请使用Community版本,因Professional和Standard版本需要购买Licenses) ☆假设项目放在目录project文件夹下,发布的包放在project/lib下,日志文件放在project/log下,配置文件放在project/conf下,运行的jar为myjar.jar。 ☆在下载包后解压,将Java Service Wrapper包中src/bin/的App.bat.in,InstallApp-NT.bat.in,UninstallApp-NT.bat.in和bin/下的wrapper.exe放在project目录下,把后缀.in去掉。【App.bat(可以直接运行程序),InstallApp-NT.bat(安装成Windows服务),UninstallApp-NT.bat(卸载Windows服务)】。修改App.bat,InstallApp-NT.bat,UninstallApp-NT.bat中的set _WRAPPER_CONF="%_REALPATH%conf\wrapper.conf"。 ☆把Java Service Wrapper包中lib目录下的Wrapper.DLL,wrapper.jar拷贝到project/lib下,在原来的运行的jar文件myjar.jar中的MANIFEST.MF增加Class-Path: 其他jar wrapper.jar wrapper.dll。 ☆把Java Service Wrapper包中src/conf目录下的wrapper.conf.in放到project/conf下,去掉后缀.in。然后修改为 wrapper.java.classpath.1=dist/wrapper.jar wrapper.java.classpath.2=dist/myjar.jar wrapper.java.library.path.1=dist /#原来程序运行的入口 wrapper.app.parameter.1=myapp.mainClass wrapper.logfile=log/wrapper.log wrapper.console.title=MyApp服务 wrapper.ntservice.name=MyApp服务 wrapper.ntservice.displayname=MyApp服务 wrapper.ntservice.description=MyApp服务

  ☆然后直接运行App.bat,如果运行成功的话,然后就可以执行InstallApp-NT.bat发布成Windows服务,然后就可以设置成开机自启动了,不怕别人启动的时候自己的程序没有执行。另外如果在project/bin当成bat的目录的话没这么麻烦。

使用Java Service Wrapper将java程序作为linux服务并且开机自动启动 以java应用程序为例,打包为tianlong.jar,程序入口为tianlong.QueueTest。 下面在linux的/opt下建立tianlong目录,复制tianlong.jar到/opt/tianlong/lib目录下。 1、下载Java Service Wrapper(请使用Community版本,因Professional和Standard版本需要购买Licenses), 解压。 http://wrapper.tanukisoftware.org/ 复制src\bin\sh.script.in到/opt/tianlong/bin目录,重命名为QueueTest 复制wrapper\bin目录下的wrapper文件到/opt/tianlong/bin目录 复制src\conf\wrapper.conf.in到/opt/tianlong/conf目录,重命名为wrapper.conf 复制src\lib\lib目录下3个文件到/opt/tianlong/lib目录 wrapper.so wrapper.jar wrappertest.jar 2、修改/opt/tianlong/bin/QueueTest文件 APP_NAME="QueueTest" //注意这里,这里的应用服务名称应该与第1步的/opt/tianlong/bin里面的 QueueTest名字相同 APP_LONG_NAME="QueueTest Application Server" WRAPPER_CMD="./wrapper" //这里的路径要写正确,这里是对应了/opt/tianlong/bin/wrapper这个文件 WRAPPER_CONF="../conf/wrapper.conf" //这里的路径要写正确,这里是对应了/opt/tianlong/conf/wrapper.conf这个文件 赋予执行权限 chmod 775 /opt/testapp/bin/SocketServer chmod 775 /opt/testapp/bin/wrapper 3、修改/opt/tianlong/conf/wrapper.conf文件 wrapper.java.command=/usr/java/jdk1.6.0_07/bin/java //这里是写java的安装路径 使用WrapperStartStopApp,这样可以通过命令带start/stop来启动/停止程序。 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp /#这里添加你用到的jar包文件,从1..n你自己全写上吧,不过wrapper是必须的 wrapper.java.classpath.1=../lib/wrapper.jar wrapper.java.classpath.2=../lib/tianlong.jar //这里表示将打包好的tianlong.jar放在/opt/tianlong/lib这个文件夹中 wrapper.java.classpath.3=../lib/asterisk-java-0.3.jar wrapper.java.classpath.4=../lib/mysql-connector-java-5.1.6-bin.jar wrapper.java.classpath.5=/usr/java/jdk1.6.0_07/lib/dt.jar wrapper.java.classpath.6=/usr/java/jdk1.6.0_07/lib/tools.jar wrapper.java.classpath.7=../cofig.properties //这个是应用程序用到的配置文件。如果使用的应用程序需要用到 配置,就需要把这个文件包含进来 wrapper.java.library.path.1=../lib //这里是表示wrapper使用到的jar包的路径,一般默认即可,绝对路径是:/opt/tianlong/lib /#wrapper.java.initmemory=3 JVM启动时的初始内存大小,当前是3M,如果要自定义,将/#去掉,设置自己的值即可。 /#wrapper.java.maxmemory=64 JVM启动时的最大内存使用量,当前是64M,如果要自定义,将/#去掉,设置自己的值即可。 /#这个就是你自己可执行程序的主类(MainClass),一般来说,就是包含public static void main的那个类 wrapper.app.parameter.1=tianlong.QueueTest wrapper.app.parameter.2=1 wrapper.app.parameter.3=true wrapper.app.parameter.4=tianlong.QueueTest wrapper.app.parameter.5=true wrapper.app.parameter.6=1 wrapper.app.parameter.7=stop 4、让QueueTest开机自动运行 ln -s /opt/tianlong/bin/QueueTest /etc/init.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc0.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc1.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc2.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc3.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc4.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc5.d/QueueTest ln -s /opt/tianlong/bin/QueueTest /etc/rc6.d/QueueTest 5、测试 执行命令:service QueueTest start|stop|restart|status 程序运行时,Java Service Wrapper在/opt/tianlong/bin/目录下产生wrapper.log日志, STATUS | wrapper | 2009/02/25 17:04:01 | --> Wrapper Started as Daemon STATUS | wrapper | 2009/02/25 17:04:01 | Java Service Wrapper Community Edition 3.3.2 STATUS | wrapper | 2009/02/25 17:04:01 | Copyright (C) 1999-2009 Tanuki Software, Ltd. All Rights Reserved. STATUS | wrapper | 2009/02/25 17:04:01 | http://wrapper.tanukisoftware.org STATUS | wrapper | 2009/02/25 17:04:01 | STATUS | wrapper | 2009/02/25 17:04:01 | Launching a JVM... INFO | jvm 1 | 2009/02/25 17:04:02 | WrapperManager: Initializing... 出现上面这个就表示已经配置成功了。如果配置有错误的话,在wrapper.log里面会有提示。 同时,如果程序配置成功的并且启动的话,在/opt/tianlong/bin里面会有一个QueueTest.pid。 附目录结构 /opt/tianlong/ cofig.properties /opt/tianlong/bin | QueueTest | wrapper | wrapper.log(程序运行时自动产生) /opt/tianlong/conf | wrapper.conf /opt/tianlong/lib | libwrapper.so | wrapper.jar | tianlong.jar | mysql-connector-java-5.1.6-bin.jar | asterisk-java-0.3.jar

分享到: log4j配置简要说明 | EXP-××××: 问题处理方法(整理中..)

发表评论

您还没有登录,请您登录后再发表评论

coconut_zhang的博客

coconut_zhang

  • 浏览: 62966 次
  • 性别: Icon_minigender_1
  • 来自: 天津
  • 最近访客 更多访客>>

jjunxiao的博客

jjunxiao

毛广斌的博客

毛广斌 alex.zeng的博客

alex.zeng

return_space的博客

return_space

文章分类

存档分类

最新评论

使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动

Posted on

使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动 - Tomcat - Java - ITeye论坛

您还未登录 ! 登录 注册

ITeye-最棒的软件开发交流社区

-

论坛首页Java企业应用论坛

使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动

全部 Hibernate Spring Struts iBATIS 企业应用 Lucene SOA Java综合 设计模式 Tomcat OO JBoss 最成熟稳定甘特图控件,支持Java和.Net

浏览 5354 次 锁定老帖子 主题:使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动

精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0) 作者 正文 * wenson

  • 等级: 初级会员
  • wenson的博客
  • 性别:
  • 文章: 111
  • 积分: 80
  • 来自: 广州
  • 发表时间:2008-01-11 最后修改:2009-02-02

< > 猎头职位: 北京: ITeye网站诚聘产品交互设计

相关文章:

前几天总结了使用JSVC来设置tomcat作为linux服务并且开机自动启动,但是如果要更专业一点来控制tomcat的启动,使用Java Service Wrapper应该不失为一个好的选择,下面来总结一下Java Service Wrapper在Linux中对于tomcat启动的设置: 1、 安装JDK、Tomcat,此处略过。比如tomcat安装在/opt/tomcat目录中。 2 、使用命令wget 下载Java Service Wrapper(目前版本wrapper-linux-x86-32-3.2.3,官网:http://wrapper.tanukisoftware.org), 用命令tar -zxvf wrapper-linux-x86-32-3.2.3.tar.gz 解压,得到目录wrapper-linux-x86-32-3.2.3,使用ln -s wrapper-linux-x86-32-3.2.3 wrapper 给目录wrapper-linux-x86-32-3.2.3 建一个名称为wrapper的快捷方式。 3 、复制wrapper\src\bin\sh.script.in到/opt/tomcat/bin目录,重命名为tomcat 复制wrapper\src\conf\wrapper.conf.in到/opt/tomcat/conf目录,重命名为wrapper.conf 复制wrapper\lib目录下的所有3个文件到/opt/tomcat/lib目录 复制wrapper\bin目录下的wrapper文件到/opt/tomcat/bin目录 4 、修改/opt/testapp/bin/tomcat文件 APP_NAME="tomcat" APP_LONG_NAME="Tomcat Application Server" WRAPPER_CMD="./wrapper" WRAPPER_CONF="../conf/wrapper.conf" 赋予执行权限 chmod 775 /opt/tomcat/bin/tomcat chmod 775 /opt/tomcat/bin/tomcat 5 、修改/opt/tomcat/conf/wrapper.conf文件,如: /#//////////////////////////////////////////////////////////////////// /# Wrapper Properties /#//////////////////////////////////////////////////////////////////// /# Java Application /# 设置环境变量 set.JAVA_HOME=/usr/java/jdk1.6.0_01 set.CATALINA_HOME=/opt/tomcat set.CATALINA_BASE=/opt/tomcat wrapper.java.command=/usr/java/jdk1.6.0_01/bin/java /# Java Main class. This class must implement the WrapperListener interface /# or guarantee that the WrapperManager class is initialized. Helper /# classes are provided to do this for you. See the Integration section /# of the documentation for details. /# 使用WrapperStartStopApp,这样可以通过命令带start/stop来启动/停止程序。 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp /# Java Classpath (include wrapper.jar) Add class path elements as /# needed starting from 1 /# 设置执行tomcat的classpath文件 wrapper.java.classpath.1=%CATALINA_HOME%/lib/wrapper.jar wrapper.java.classpath.2=%CATALINA_BASE%/bin/bootstrap.jar /# Java Library Path (location of Wrapper.DLL or libwrapper.so) /# 设置tomcat的lib路径 wrapper.java.library.path.1=%CATALINA_HOME%/lib/ /# Java Additional Parameters /# 设置额外参数 wrapper.java.additional.1=-Djava.endorsed.dirs=%CATALINA_HOME%/common/endorsed wrapper.java.additional.2=-Dcatalina.base=%CATALINA_BASE% wrapper.java.additional.3=-Dcatalina.home=%CATALINA_HOME% wrapper.java.additional.4=-Djava.io.tmpdir=%CATALINA_BASE%/temp /# Initial Java Heap Size (in MB) /# 设置tomcat的JVM初始化堆的大小 wrapper.java.initmemory=128 /# Maximum Java Heap Size (in MB) /# 设置tomcat的JVM堆的最大值 wrapper.java.maxmemory=512 /# Application parameters. Add parameters as needed starting from 1 /# 设置启动、停止和重启参数 wrapper.app.parameter.1=org.apache.catalina.startup.Bootstrap wrapper.app.parameter.2=1 wrapper.app.parameter.3=start wrapper.app.parameter.4=org.apache.catalina.startup.Bootstrap wrapper.app.parameter.5=true wrapper.app.parameter.6=1 wrapper.app.parameter.7=stop wrapper.filter.trigger.1=java.lang.OutOfMemoryError wrapper.filter.action.1=RESTART /#//////////////////////////////////////////////////////////////////// /# Wrapper Logging Properties /#//////////////////////////////////////////////////////////////////// /# Format of output for the console. (See docs for formats) wrapper.console.format=PM /# Log Level for console output. (See docs for log levels) wrapper.console.loglevel=INFO /# Log file to use for wrapper output logging. /# 设置log文件路径 wrapper.logfile=%CATALINA_BASE%/logs/wrapper.log /# Format of output for the log file. (See docs for formats) wrapper.logfile.format=LPTM /# Log Level for log file output. (See docs for log levels) wrapper.logfile.loglevel=INFO /# Maximum size that the log file will be allowed to grow to before /# the log is rolled. Size is specified in bytes. The default value /# of 0, disables log rolling. May abbreviate with the 'k' (kb) or /# 'm' (mb) suffix. For example: 10m = 10 megabytes. /# 设置log文件最大值 wrapper.logfile.maxsize=5 /# Maximum number of rolled log files which will be allowed before old /# files are deleted. The default value of 0 implies no limit. /#设置log文件最多个数 wrapper.logfile.maxfiles=10 /# Log Level for sys/event log output. (See docs for log levels) wrapper.syslog.loglevel=NONE /#//////////////////////////////////////////////////////////////////// /# Wrapper Windows Properties /#//////////////////////////////////////////////////////////////////// /# Title to use when running as a console /# windows下tomcat控制台名称 wrapper.console.title=Tomcat6 Application Server /#//////////////////////////////////////////////////////////////////// /# Wrapper Windows NT/2000/XP Service Properties /#//////////////////////////////////////////////////////////////////// /# WARNING - Do not modify any of these properties when an application /# using this configuration file has been installed as a service. /# Please uninstall the service before modifying this section. The /# service can then be reinstalled. /# Name of the service /# 设置服务名称 wrapper.ntservice.name=tomcat6 /# Display name of the service wrapper.ntservice.displayname=@app.long.name@ /# Description of the service wrapper.ntservice.description=@app.description@ /# Service dependencies. Add dependencies as needed starting from 1 wrapper.ntservice.dependency.1= /# Mode in which the service is installed. AUTO_START or DEMAND_START /# 设置允许Tomcat服务自动启动 wrapper.ntservice.starttype=AUTO_START /# Allow the service to interact with the desktop. wrapper.ntservice.interactive=false 6 、设置tomcat开机自动运行: ln -s /opt/tomcat/bin/tomcat /etc/init.d/tomcat 7 、测试,执行命令:service tomcat start|stop|restart|status 至此,使用Java Service Wrapper来设置Tomcat作为Linux的服务完成,从此过程看来,Java Service Wrapper对tomcat的控制程度比tomcat自带的JSVC深入多了。 目录结构: /opt/tomcat/bin | tomcat | wrapper /opt/tomcat/logs | wrapper.log(程序运行时自动产生) /opt/tomcat/conf | wrapper.conf /opt/tomcat/lib | libwrapper.so | wrapper.jar | test.jar

声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

推荐链接

棒! tomcat的shutdown命令老是关不掉全部的java进程 返回顶楼 回帖地址

0 0 请登录后投票

论坛首页Java企业应用版 跳转论坛:移动开发技术 Web前端技术 Java企业应用 编程语言技术 综合技术 入门技术 招聘求职 海阔天空

© 2003-2011 ITeye.com. [ 京ICP证110151号 京公网安备110105010620 ] 百联优力(北京)投资有限公司 版权所有 上海炯耐计算机软件有限公司 提供商务支持

使用Java Service Wrapper 把Java程序作为Windows系统服务

Posted on

使用Java Service Wrapper 把Java程序作为Windows系统服务 - - ITeye技术网站

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼

招聘 搜索

您还未登录 ! 登录 注册

lbyzx123

使用Java Service Wrapper 把Java程序作为Windows系统服务 **

JavaWindowsTomcat配置管理C/#

Java程序很多情况下是作为服务程序运行的,在Un/x平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你的Console窗口关闭?是否怀念用VC写的Win32服务程序? 翻开JBOSS、Tomcat的发布包,发现他们都使用了一个Open source——Java Service Wrapper。用Java Service Wrapper可以轻松解决我们的需求,让我们的服务程序成为 Win32系统服务。 当然,在Un/x下也可以使用Java Service Wrapper,可以避免加“&”的粗暴方式,导致每天收到一堆mail,通过Java Service Wrapper提供的日志方式查看运行信息。 Java Service Wrapper功能很强大,同时支持Windows及Un/*x平台,提供三种方式把你的Java程序包装成系统服务,这里只介绍最简单的一种方式,因这种方式无需对已有的服务程序作任何改变,仅仅增加几个script、配置文件就可以把你的Java服务程序改造成系统服务程序了。 当然在使用之前需要到http://sourceforge.net/project/showfiles.php?group_id=39428下载Java Service Wrapper的发布包。 下面简单介绍一下具体的使用步骤:

  1. 将下载的Java Service Wrapper包解压到本地,目录为{WRAPPER_HOME};
  2. 服务应用程序名为MyServApp,在目录d:\MyServApp下建立bin、conf、logs、lib目录;并把你的已有应用程序如NioBlockingServer.class拷贝到该目录下;
  3. 将{WRAPPER_HOME}\src\bin\下的遗以下文件拷贝到MyServApp目录下,并重命名。 {WRAPPER_HOME}\bin\Wrapper.exe  C:\ MyServApp \bin\Wrapper.exe {WRAPPER_HOME}\src\bin\App.bat.in  C:\ MyServApp\bin\MyApp.bat {WRAPPER_HOME}\src\bin\InstallApp-NT.bat.in  C:\ MyServApp\bin\InstallMyApp-NT.bat {WRAPPER_HOME}\src\bin\UninstallApp-NT.bat.in  C:\ MyServApp\bin\UninstallMyApp-NT.bat
  4. 将{WRAPPER_HOME}\lib下的以下文件拷贝到C:\ MyServApp \lib目录下 {WRAPPER_HOME}\lib\Wrapper.DLL {WRAPPER_HOME}\lib\wrapper.jar
  5. 将{WRAPPER_HOME}\src\conf\wrapper.conf.in拷贝到C:\ MyServApp \conf目录下并命名为wrapper.conf;并修改wrapper.conf文件,在其中配置您的应用服务。 主要修改以下几项即可: /#你的JVM位置: wrapper.java.command=D:\Sun\j2sdk1.4.0_03\bin\java /#运行参数:如: wrapper.java.additional.1=-Dprogram.name=run.bat /#classpath: wrapper.java.classpath.1=../lib/wrapper.jar wrapper.java.classpath.2=../bin/. /# Java Library Path (location of Wrapper.DLL or libwrapper.so) wrapper.java.library.path.1=../lib /#MAIN CLASS 此处决定了使用Java Service Wrapper的方式 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp /#你的Java应用类 wrapper.app.parameter.1= NonBlockingServer /# 服务名 wrapper.ntservice.name=NB /# Display name of the service wrapper.ntservice.displayname=Nio Nonblocking Server /# 服务描述 wrapper.ntservice.description=Nio Nonblocking Server 其他的配置根据你的需要改变即可
  6. 对以上配置的MyApp.bat进行测试,运行MyApp.bat,就像在Console窗口下运行Tomcat一样;
  7. 对以上配置的服务进行测试,运行C:\ MyServApp\bin\InstallMyApp-NT.bat将把你的应用(此处为NioBlockingServer)安装到Win32系统服务中了。
  8. 打开控制面板-管理程序-服务,看到Nio Nonblocking Server已经在系统服务中了,其他用法就与我们熟悉的Windows服务一样了。 Tomcat使用的是Java Service Wrapper模式二,这种方式需要对已有的程序进行小的改动,但可以通过Socket端口的方式控制服务程序核心的启动,更加灵活。Java Service Wrapper提供的模式三比较复杂,需要作出更多的编码,我没有研究。 采用模式一,即可简单有效的把我们的服务程序包装成为系统服务程序,并增强了日志功能,我们可以把MyServApp的几个文件做成模板,每次修改文件名,配置文件就可以了,有精力的朋友更可以做成Eclipse的plugin,鼠标点点就把应用配成服务了。 附件是一个模板,可以直接修改文件名和配置文件就可以把服务改造了。 希望本文能对大家有所帮助,当然也申请加分了,我的2分实在不够混的了。

    /Files/cai9911/NTServiceWrapperTemplate.rar

    自己做的一个例子,可以直接拿来修改: (写下来备忘) 主要修改config/wrapper.conf 一个地方: wrapper.app.parameter.1= HelloWorld <要启动的类> 其他的可以修改应用程序的服务名称等. /Files/cai9911/JavaService.rar 分享到:

javascript中如何给二维数组赋值? | an error has occurred.See error log for ...

评论

发表评论

您还没有登录,请您登录后再发表评论

lbyzx123的博客

lbyzx123

  • 浏览: 51258 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
  • 最近访客 更多访客>>

zhaoyijun的博客

zhaoyijun

yang8580330的博客

yang8580330 bgvhuy38的博客

bgvhuy38

taibin的博客

taibin

文章分类

存档分类

最新评论

被动模式下FTP的详细工作过程

Posted on

被动模式下FTP的详细工作过程

被动模式下FTP的详细工作过程

PASV FTP在工作的第一步,与PORT FTP一样,会首先使用21端口建立控制连接;但在第二步,由FTP客户端主动发起建立数据传输连接请求,服务器的数据传输端口为随机端口,因此,每次建立的数据传输连接通道,服务器所使用的端口都不相同。

本示例客户端IP是192.168.120.168,服务器IP是192.168.120.240,因为客户端的MS-DOS不支持PASV模式,所以使用FlashFXP软件来连接服务器。通过抓包工具来查看用户从连接FTP服务器到退出FTP服务器经过的所有过程。 使用FlashFXP所做的操作:1.输入FTP服务器的IP,要登入的用户名和密码。2.进入用户家目录,查看.bashrc和.bash_profile两个文件。3.退出FTP。

PASV FTP**的详细工作过程:**

1. 因为FTP使用的是TCP协议,所以客户端FlashFXP在连接服务器192.168.120.240时,首先会经历TCP的三次握手来建立控制通道。客户端使用任意的端口N(>1024)来连接FTP服务器默认的21端口。这和PORT模式一样。 2. 在TCP三次握手结束后,服务器端正式响应客户端的控制连接请求,控制通道建立。

3. 客户端向服务器发送含有ACK的数据段来确认控制连接建立并发送用户名。 4. 服务器向客户端发送含有ACK的数据段来确认用户名。

5. 服务器向客户端询问密码。 6. 客户端向服务器发送含有ACK的数据段来确认并发送密码,密码为明文。

7. 服务器向客户端发送含有ACK的数据段来确认密码收到。 8. 服务器向客户端发送登陆成功的信息。

9. 客户端向服务器发送含有ACK的数据段来确认并发送查询系统类型的指令(见图一)。 10. 服务器向客户端发送含有ACK的数据段来确认收到指令。

11. 服务器向客户端回应系统的类型为UNIX(见图二)。 12. 客户端向服务器发送列出服务器的所有扩展命令和扩展功能的指令(见图三)。

13. 服务器响应客户端的FEAT请求(见图四)。 14. 服务器响应客户端有EPSV(扩展PASV,支持非IPV4)的扩展功能(见图五)。

15. 客户端向服务器发送含有ACK的数据段来确认收到信息。 16. 服务器响应客户端自己的其他特性(见图六)。MDTM:保留下载文件的日期/时间;REST STREAM:重设文件传输方式为stream形式。

17. 客户端确认收到服务器的信息。 18. 服务器响应客户端进入到用户的家目录(见图七)。

19. 客户端确认收到服务器的信息。 20. 客户端向服务器发送文件传输使用何种模式(Binary、ASCII)的指令(见图八)。

21. 服务器回应客户端使用Binary模式(见图九)。 22. 客户端向服务器询问.bashrc文件的大小(见图十)。

23. 服务器回应客户端.bashrc文件的大小为124字节(见图十一)。 24. 客户端向服务器发出PASV的指令(用来进行数据传输)(见图十二)。

25. 服务器回应客户端使用PASV模式,并且商量数据传输端口用232x256+151=59543(见图十三)。 26. 客户端主动使用N+1端口来连接服务器的59543端口,并且向服务器发送含有SYN的数据段来开始进行数据传输连接的第1次握手(见图十四)。

27. 服务器向客户端发送含有SYN和ACK的数据段来进行第2次握手(见图十五)。 28. 客户端向服务器发送含有ACK的数据段来进行第3次握手(见图十六)。

29. 3次握手过程完成,客户端向服务器发送查看.bashrc文件的指令(见图十七)。 30. 服务器回应客户端使用Binary数据传输模式连接.bashrc文件(见图十八)。

31. 服务器开始进行数据传输。 32. 服务器确定数据传输完毕,然后向客户端发送含有FIN和ACK的数据段来请求断开本次数据连接,第1次断开(见图十九)。

33. 客户端向服务器发送含有ACK的数据段答应服务器的断接请求,第2次断开(见图二十)。 34. 服务器响应客户端文件发送完成的信息(见图二十一)。

35. 客户端向服务器发送含有ACK的数据段来确认收到信息。 36. 客户端向服务器发送含有FIN和ACK的数据段来请求断开客户端到服务器之间的数据连接,第3次断开(见图二十二)。

37. 服务器向客户端发送含有ACK的数据段确认断开连接,第4次断开(见图二十三) 38. 接下来是查看.bash_profile文件的过程。其过程和查看.bashrc文件的过程一样(在此不详述了),只是服务器和客户端的数据传输端口变了。服务器的数据传输端口是随机的;客户端的数据传输端口是N+2。

39. 客户端在查看完.bash_profile文件并彻底完成该次数据连接的4次断开后,向服务器发送退出的指令(见图二十四)。 40. 服务器响应客户端的退出请求(见图二十五)。

41. 服务器向客户端发送含有FIN和ACK的数据段,请求断开控制连接(见图二十六)。这是第一次断开控制连接。 42. 客户端向服务器发送含有ACK的数据段来应答服务器的断接请求(见图二十七)。这是第二次断开控制连接。

43. 客户端向服务器发送含有FIN和ACK的数据段,请求断开到服务器之间的控制连接(见图二十八)。这是第三次断开控制连接。 44. 服务器向客户端发送含有ACK的数据段,来确认客户端的断接请求(见图二十九)。这样本次FTP控制连接完全断开。

通过查看本次示例(被动FTP)的详细过程,我们可以得到以下几点结果:

1. 服务器的控制连接端口为21,数据传输端口随机(>1024)并且每次的数据传输端口都不一样。 2. 客户端的控制连接端口为N(>1024),数据传输端口在第一次进行数据传输时为N+1,在第二次数据传输时为N+2,依次类推。

3. 服务器主动告诉客户端自己的数据传输端口。 4. 客户端主动用数据传输端口N+x去连接服务器的随机数据传输端口。

5. 在一次FTP连接的过程中,只有一次控制连接,却可以有多次数据传输连接。 6. 不管是控制连接还是数据传输连接,在每次从建立到完成都需要经过3次连接和4次断开的过程。(这符合TCP协议的要求)

本文档使用的图例:

11 图一:客户端发送查询系统类型的指令

13

图二:服务器响应客户端系统类型为UNIX

14 图三:客户端请求服务器列出它的所有扩展命令和扩展功能

15

图四:服务器响应客户端的FEAT请求

16 图五:服务器响应客户端有EPSV(扩展PASV,支持非IPV4)的扩展功能

18

图六:服务器响应客户端自己支持的其他特性

20 图七:服务器响应客户端进入到用户家目录

22

图八:客户端向服务器询问文件传输的模式

23 图九:服务器响应客户端使用Binary模式

24

图十:客户端向服务器询问.bashrc文件的大小

25 图十一:服务器回应客户端.bashrc文件的大小为124字节

26

图十二:客户端向服务器发送PASV指令

27 图十三:服务器响应客户端使用PASV模式,并且商量数据传输端口用59543

28

图十四:第一次数据传输连接之第一次握手

29 图十五:第一次数据传输连接之第二次握手

30

图十六:第一次数据传输连接之第三次握手

31 图十七:客户端向服务器发送查看.bashrc文件的指令

32

图十八:服务器响应客户端使用Binary数据传输模式来连接.bashrc文件

34 图十九:服务器发送FIN和ACK请求断开本次数据连接(第1次断开)

35

图二十:客户端发送ACK答应服务器的请求(第2次断开)

36 图二十一:服务器响应客户端文件发送完毕的信息

38

图二十二:客户端向服务器发送含有FIN和ACK的数据段请求断开数据连接(第3次断开)

39 图二十三:服务器向客户端发送含有ACK的数据段确认断开连接(第4次断开)

56

图二十四:客户端向服务器发出退出的指令

57 图二十五:服务器响应客户端的退出请求

58

图二十六:服务器向客户端发送FIN和ACK请求断开控制连接(第1次断开)

59 图二十七:客户端向服务器发送ACK答应服务器请求(第2次断开)

60

图二十八:客户端向服务器发送FIN和ACK请求断开控制连接(第3次断开)

61 图二十九:服务器向客户端发送ACK答应断开控制连接(第4次断开)

62

图三十:本次示例全部过程