ssh2编程
⑴ Serial SSH Rlogin Telnet Raw分别是什么协议
Serial是串口通信协议,规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。
SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的文件传输协议。建立在应用层和传输层基础上。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
Rlogin是unix系统中的远程登录协议。由于客户端进程和服务器进程已经事先知道了对方的操作系统类型,因此也就省去了选项协商机制。
Telnet是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
Raw是打印设备的默认打印协议。为了发送 RAW 格式的作业,打印server将打开一个针对打印机网络接口的 TCP 流。
(1)ssh2编程扩展阅读:
Telnet与Rlogin协议在传输机制上是有安全漏洞的,因为它们在传输数据时使用明文机制;如果有人在网络上进行截获这样的数据,那么一些重要的数据将会不可避免的泄露。
而SSH协议可以替代以Telnet,Rlogin等传统网络程序协议,在不安全的通信环境中提供了比较可靠的数据保护机制。SSH协议采用了数据加密机制,能够防止DNS欺骗和IP欺骗。通过SSH协议所传输的数据是经过压缩的,因此相对来说加快了传输速度。
⑵ 如何在C语言程序中使用SSH
1、这种功能用脚本实现最好
2、最好弄成dsa公钥验证方式,也就是ssh无密码登录
3、ssh的密码输入是绑定到TTY而不是stdin的,所以无法重定向(到管道)
3.1、如果想通过程序输入ssh密码,那么就要模拟TTY,或者让ssh认为你的输入是直接来自TTY
3.2、或者,你干脆自己实现个最简单的ssh协议吧
3.3、程序模拟TTY,一般会直接采用expact库,这在脚本里面很方便,但由于C处理字符串过于笨拙……
4、登录之后,和ssh交互需要通过管道进行。用写来模拟控制台键入字符,用读来取命令输出数据;至于命令返回值……读 echo $? 的输出吧
5、如果命令本身也有输入/输出提示,比如 rm xxx 会让你按y什么的,那么你必须自己捕捉到这个提示,然后往管道写一个"Y\n"进去。所以……也许还是expect方便。
6、你可以搞一个脚本,在脚本里用expect完成登录动作,然后下interact命令进入交互模式;然后在C里面用popen()执行这个脚本,这样就可以避开登录问题,但仍然要处理命令行交互问题(也就是回答are you sure之类的问题,当然这可以通过为命令传入-y之类参数来绕开,不过有些命令未必支持)。
⑶ 什么是远程登录有几种方式
远程登录是UNIX 命令,它允许授权用户进入网络中的其它 UNIX 机器并且就像用户在现场操作一样。一旦进入主机,用户可以操作主机允许的任何事情,比如:读文件、编辑文件或删除文件等。
远程登录的方式有三种,分别是telnet、ssh和vnc的方式。可以使用户坐在联网的主机键盘前,登录进入远距离的另一联网主机,成为那台主机的终端。这使用户可以方便地操纵世界另一端的主机,就像它就在身边一样。
方式解析
1、telnet
Telnet是进行远程登录的标准协议,它把用户正在使用的终端变成网络某一远程主机的仿真终端,使得用户可以方便地使用远程主机上的软、硬件资源。但telnet有一个致命的缺陷,就是Telnet协议使用明文的方式传送所有的数据(包括账号和口令)。
2、SSH
SSH是目前通常使用的远程管理协议,通过SSH可以安全地访问服务器。SSH基于成熟的公钥加密体系,把所有传输的数据进行加密,保证数据在传输时不被恶意破坏、漏露和篡改。Linux下广泛使用免费的OpenSSH程序来实现SS协议,它同时支持SSH1和SSH2协议。
3、VNC
VNC是virtual network computing的缩写,由Olivetti & Oracle研究室所开发,并以GPL方式开源。VNC原理与上述两者不同,Telnet和SSH服务只能实现基于文本的远程控制,利用VNC可以实现图形化的远程控制。
其使用RFB协议分享显示屏画面,并可跨平台使用。默认使用TCP端口5900至5906,服务端可以在5900口用“监听模式”连接一个客户端,使用监听模式的一个好处是服务端不需要设置防火墙。
⑷ 谁能给我讲讲SSH怎么实现啊
呵呵 我帮你下吧!
这些内容都是我自己手写的,其实术语不多,最重要的是配置
我说明下第一注意的是加包与删除包:
需要手动加载的包名(必须加)在lib目录下加:commons-dbcp.jar 和commons-pool.jar包
需要删除的(必须删除)的包在lib目录下删:asm-2.2.3.jar包
第二我们就开始搭建拉!(顺便告诉你下,你可以先把struts和Spring和hibernate导入进来 ,不懂没关系 你看我的)
(ssh包导入进来后)你先按照样子导入如果不知道搭的话也很简单可以学会的那我们就开始写了:
1.写基类时(beasDAo(父类)应该会写)也就是你要写的增删改的方法必须继承:HibernateDaoSupport (Spring来管理hibernate)
得到相应的方法为:
protected void add(T obj) throws Exception {
try {
super.getHibernateTemplate().save(obj);
} catch (Exception e) {
throw e;
}
}
增删改的方法都一样super.getHibernateTemplate().update(obj);
super.getHibernateTemplate().delete(obj);
但查询方法则要new个接口 如查询所有:
protected List<T> getAll(final Class T) {
return super.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, sqlException {
Query q = session.createQuery("from " + T.getName());
return q.list();
}
});
根据id也查询则是如下方法 其实也没什么可概括的:
protected T getObjById(Class T, Serializable id) {
return (T) super.getHibernateTemplate().get(T, id);
}
写好这个之后你要写相应的DAO继承基类得到此方法 这个我就不说了
就是得到刚刚自己写的beasDao的方法
描述相应的DAO的和接口IDAO(这个接口必须有,因为Spring中不能有
IDAO =new DAo();的出现(不过你先写着,等下再来改) 这就是为什么要有接口了 Spring说句白的就是针对接口编程
)
Service也是一同样有IService接口(这个和DAO一个原理一样 等下我们在来写Service怎么运用DAO的方法)
写好之后我们就开始注入了(这个就是开始配置了)
在Spring的配置文件applicationContext.xml中则写入这段话,其实意思很见简单,你不要把他搞的太复杂了,我来解释下,原来的时候你是用Hibernate来连接数据库,还有映射相应的pojo对象 是吧 ,但现在我们有了spring就把以前的hibernate的文件给干掉 让Spring去管理 但spring如何去管理 我们先写着:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"> (这里是数据连接池)
</property>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/crmdb"> (这个是不是很眼熟)
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="maxActive" value="10"></property>
<property name="initialSize" value="2"></property>
</bean>
<bean id="sessionFactory" (呵呵 这个就是我们以前来创建Session的工厂了,现在也来了)
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" /> (这里就是把连接池给注入进来了)
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop> (你仔细看下都很眼熟)
</props>
</property>
<!--<property name="mappingDirectoryLocations">
<list>
<value>com/crm/pojos</value>
</list>
</property>-->
<property name="mappingResources">
<list>
<value>com/crm/pojos/Zongjie.hbm.xml对应的pojo映射文件路径有多少写多少</value> (这里就是管理映射文件了)
</list>
</property>
</bean>
(而从这里开始就是事务管理。听我的 死记下 呵呵 )
<!-- 事务管理器 apring2.0中间事务的配置和处理-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 事务属性:通知/处理/横切关注点
<tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" />
以add开头 事务传播属性(没有事务就创建) 事务隔离级别(数据库默认)
-->
<tx:advice id="mytx">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="upd*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="se*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 织入 -->
<aop:config>
<aop:advisor advice-ref="mytx" pointcut="execution(* com.crm.service.*.*(..))"/>
</aop:config>
</beans>
写后之后我们就开始注入对应的DAO 你可以自己创建一个bean.xml文件里面是这样写的
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="Factory" abstract="true">(这里一定要看请,不错 这就是我们刚刚的sessionFactory 他为什么来这里了勒 因为你以前写基类的时候就是用他来创建session 但现在我们有了spring怕他不认识 所以 我们给他提个醒创建个模板)
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="CustomerDao" class="com.crm..CustomerDao" parent="Factory"></bean>有多少DAO注入多少 呵呵
</beans>
在Service中导 我们要把以前的new(IDao =new Dao();)不要
如下面显示:IDAO i;提供对应的get 与set方法就可以了
然后类我们自己创建个servicebean.xml配置文件注入相应的DAO到Service中
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="CustomerService" class="com.crm.service.CustomerService">
<property name="icustomer" ref="CustomerDao"></property>
<property name="i" ref="UserDao"></property> 你看的没name=i;就是我刚刚定义的 我们要的就是他提供的set方法 ,而ref="UserDao"这就是我刚刚上面自己的啊
</bean>
</beans>
在你写的action中我们要和写Service里面的DAO一样但要继承DispatchActionSupport
然后在
IService customerservice;提供get 与set 方法
再来我们创建个strutsbean.xml配置文件写入:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean name="/customer" class="com.crm.struts.action.CustomerAction">
<property name="customerservice" ref="CustomerService"></property>
</bean>
</beans>
然后我们在Struts的配置文件中加如个插件:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/strutsbean.xml"/>
</plug-in>
这是加载strutsbean.xml的配置文件
最后就是在web.xml中加载我们自己创建的bean.xml和servicebean.xml
web.xml 文件中加入
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/bean.xml,/WEB-INF/servicebean.xml</param-value>
</context-param>
<servlet>
<servlet-name>ContextLoaderServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
这样整个就配置完了!
呵呵 如果实在不懂的话,我可以随时告诉你qq:236133039
我把一个整合好讲给你听的给你
祝你好运!
⑸ 各位大神说说学ssm好还是学ssh好
SSH 通常指的是 Struts2,Spring ,Hibernate。
SSM 则指的是 SpringMVC,Spring,MyBatis
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层。
SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层。
共同之处是都使用了Spring的依赖注入DI来管理各层的组件,使用了面向切面编程AOP来实现日志管理,权限认证,事务等通用功能的切入。
不同之处是 Struts2 和 SpringMVC 做前端控制器的区别,以及 Hibernate 和 MyBatis 做持久化时的区别。但是,Struts2 也可以和 MyBatis 搭配使用,SpringMVC 也可以和 Hibernate 搭配使用。本文为了简化对比,指定 Struts2 要和 Hibernate 搭配,SpringMVC 要和 MyBatis 搭配。
⑹ java的SSH框架各层有什么意义它是mvc的概念吗还是架构层次上的
SSH(struts+spring+hibernate)是Java EE一种强大的框架技术来的。
按照我个人理解来说吧,这样你也容易明白:
struts:就是一个核心控制器,经常用来处理和控制数据请求和页面跳转等。
spring: 说白了就是Java Bean对象管理池,使用SSH框架时,许多对象需要封装、创建等操作,总不能每次Action的操作都让开发者进行一次处理吧,所以通过spring来管理所有bean对象,这样开发者下次需要使用这个对象时,直接使用就好了,而已spring还能控制对象作用域等等这些。
hibernate:个人理解就是个数据库连接映射池,你知道就好了。
MVC楼下已经有人告诉你了,说白了SSH就是包含了MVC的设计逻辑在里面
⑺ 如何在C语言程序中使用SSH
简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 计算机虽然功能十分强大。可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是一堆废铁,不会理会我们对它下达的“命令”。于是,我们要驯服它,只有通过一种方式——程序,这也是我们和计算机沟通的唯一方式。 那程序到底是什么呢? 程序也就是指令的集合,它告诉计算机如何执行特殊的任务。 打个比方说,它好比指导你烹调菜品的菜谱或指挥行驶一路到达目的地的交警(或者交通路标)。没有这些特殊的指令,就不能执行预期的任务。计算机也一样,当你想让计算机为你做一件事情的时候,计算机本身并不能主动为我们工作,因此我们必须对它下达指令,而它根本
⑻ SSH的分别是指什么,各有什么特别和区别.
经典的ssh应用 ,实际上是将 struts或struts2,spring,hinanate 这三个不同的java框架集中到一起.
成为一个优秀的Java Web开发方案.
简单描述下:
struts 作为一个表示层框架,主要是 获取页面的数据 及 控制页面跳转.
hibernate 是一个数据持久层的框架,只管 怎么去访问及操作数据库的数据.
spring 是一个更加强大的框架,是为J2EE 应用程序开发提供集成的框架,体现在其简单性、可测试性和松耦合上,同时对面向切面编程也有支撑的.
再简单打个比方, ssh就像一个大型产品制造企业里的三类员工,
struts是 负责 跟客户打交道的 客服人员,
hibernate 是 仓库的仓储管理人员,负责货物的仓储管理.
spring 就是 管理层的核心领导,负责协调调度,以保障企业的良好运作.
⑼ 如何在SSH中进行真正面向对象的软件开发
首页 > 工作日志 > 如何在SSH中进行真正面向对象的软件开发
如何在SSH中进行真正面向对象的软件开发
SSH从头到尾都是围绕着一个中心建立的:面向对象。
Hibernate是作为一种对象持久化手段而存在的。所谓的O/R MAPPING其实就是持久化。因为对象与关系只不过是一个个体与集合的关系,本质上并不存在冲突。不需要映射。事实上,在大多数情况下,内存中的一个对象正好对应关系中的一条或多条记录。甚至连转化都不需要。概念是等同的,不存在映射。另一种看法是直接把关系中的记录直接看成对象。这样子的话对于理解持久化的概念会更容易与直接一点。
而Struts则在很大程度上是作为一种O/STREAM MAPPING的技术存在于系统前端的。从这个意义上讲,Hibernate与Struts都更像是一种对I/O的封装。因为对象只能生存在内存中,所以才需要这两种技术作I/O映射。否则“对象”怎么跟外界进行交互呢?
既然前两者在大多数情况下都只不过是作为某种程度上的MAPPER存在于系统中的,所以其实只有Spring才是这个框架的核心部分。
Spring的IoC与DI功能就是面向对象的系统中其对象系统的骨架。如果没有这个骨架,众多的对象就很难连接起来一起工作。
自己开发一个这样的框架当然也不是不可能。只是这样做的话就免不了掉入重复发明轮子的陷阱。而Spring正是为了防止或免于大家做这样的事情。
实际上,我对Spring从来没有做过任何详细的研究。IoC与DI的价值也是在我认识到面向对象的价值以后才被我认识到的。网上有人认为它们因为是应用设计模式的极佳工具所以很好。我认为这样的观点有点神化设计模式的味道。我面向对象不一定要使用设计模式好吧!
工欲善其事,必先利其器。但是同样有话:杀鸡焉用宰牛刀。设计模式为系统增加了很多不必要的类。使用它很容易掉入过度工程的陷阱。事实上,大部分设计模式的存在目的是为了解耦。但解耦本身其实是一种思想,对这种思想的贯彻不一定要通过设计模式来完成吧。
另一方面,面向对象本身其实已经在很大程度上解决了耦合的问题。
与其因为设计模式的使用而引入大量的静态接口,还不如将有些协作要求交给动态的运行时去处理(至于如何做到这一点,目前仍未想清楚。但是无论如何,大量接口的存在,对于系统肯定不是一件太好的事情。事实上,面向对象的本来目的就是为了减少接口,把接口降到第二类成员的地位)。
IoC的价值是很基础的:它完成了对象的“安装”工作。这使得应用开发过程无须考虑对象的连接。而只要把对象设计好就行了。无需考虑对象的“安装”。
比如,一个典型的使用Spring的面向对象开发流程将是这样的:
1,开发对象;
2,安装对象。
这种流程显然更适合于多人或大规模开发工作。使用它进行工业级开发变得很容易。一个对象的使用者甚至可以自己定义被使用对象的接口。然后再在安装阶段进行相关调整。
可以看出,这里最重要的是安装阶段的引入。因为如果没有这个阶段的话,开发者就必须在开发阶段完成对象的安装。这样子的话开发者的注意力就会很容易被转移而最终形成以接口为中心的系统。这样显然不利于整体的面向对象的开发。
因为在面向对象的开发中,如何更好地实现对象本身比对象之间的交互更重要。交互应该以对象系统副产品的形式出现而不是以主角出现在系统中。因为在面向对象的系统中,接口是第二类成员而不是第一类成员。
第一类成员是对象。系统是由对象组成的系统。
理解面向对象最重要的一点就是要认识到:对象系统不是功能型的系统。
而将整个对象的开发阶段分成开发与安装两个阶段正好是这种思想得以彻底贯彻的唯一方法。
因为这种方法使得在第一阶段几乎不用考虑对象之间的合作,而只需要考虑如何尽量贴切地实现对象本身。实际上,真正的对象开发也只能在这个阶段得以完成。
这样一来,安装阶段的工作逻辑就很清楚了。它就好象是在说:好了,现在让我们看看它们能不能一起相处。
而对象开发阶段的逻辑也因此变得更清晰。为了便于以后的长期协作,可能有必要对对象的行为进行更高层次的抽象以便于以后能提供更多的操作可能(组合)。
也就是说,为了更好的与其它对象相处,可能要对对象本身的价值系统进行重整。也即对对象的行为进行粒度控制。
面向对象在这一点上与其它开发模型是一样的。只不过向更高层次抽象的目的不同而已。如在面向过程的模型中,抽象的目的是为了提供更好过程粒度。在面向服务的模型中则是为了提供更好的服务粒度。而在面向对象的模型中则是为了提供更合适的对象行为粒度。
这个流程还隐含着另一种软件开发哲学,即:部件比接口重要。而不是恰好相反的。如果部件不能共同工作,那么需要修改的不是部件,而是部件之间的接口。可见,接口在这里是第二类成员。
这与真正的真实世界的语义其实很相近(除了功能紧凑型系统如汽车,机械,电力。。。这样的系统与软件系统存在本质的区别。它们的复杂度领域在技术而软件的复杂度领域在协作)。
并且它也正好是面向对象相对面向接口编程的优点之一:面向接口的结果是以接口为中心的系统。一旦接口修改则整个系统都要修改。
协作与对象到底哪个更重要,所暴露出来的其实正是面向接口与面向对象两种开发范式在思维上的根本不同。