C#环境

2024-10-16

C#环境(共7篇)

C#环境 篇1

1 i Batis.Net简介

i Batis一词来源于“Internet”和“abates”的组合, 是一个由Clinton Begin在2001年发起的开放源代码项目, 现已成为以SQL为中心的持久化层框架。IBatis.Net是从i Batis的Java版本移植过来的.NET版本。目前项目地址为:http://code.google.com/p/mybatisnet/, 可以通过项目网站下载其源代码。

i Batis提供的持久层框架包括SQL Maps和Data Access Objects (DAO) , 其中最主要的是SQL Maps。和其他对象关系映射ORM, 如Hibernate和Spring等“一站式”对象关系映射解决方案而言, i Batis则是一种“半自动化”的对象关系映射实现, 它允许程序员自己控制SQL语句, 为系统设计提供了更大的自由空间。

1.1 SQL Maps

SQL Maps是这个框架中最重要的部分, 它是整个i Batis Database Layer的核心价值所在。通过使用SQL Maps你可以显著地节约数据库操作的代码量。SQL Maps使用一个简单的XML文件来实现从实体到SQL语句的映射。跟其他的框架或者对象关系映射工具相比, SQL Maps最大的优势就是简单。同时它需要学习的东西很少, 在连接表或复杂查询时也不需要复杂的模式, 使用SQL Maps, 可以自由地使用SQL语句。这种独特的数据映射模式 (即Data Mapper) , 使用SQL映射的方式将对象持久化至关系型数据库。简单的理解就是它将在数据访问层实现的C#逻辑代码, 变为通过关系数据库与对象的映射来实现, 并将SQL逻辑放到外部的XML配置文件中, 以方便以后的维护。

1.2 Data Access Objects (DAO)

Data Access Objects允许通过一个简单接口的来操作数据, 从而隐藏了实现的细节。使用DAO, 可以动态配置应用程序来访问不同的实体存储机制。实际上DAO通过一个通用的API层把具体操作数据的细节封装了起来, 不必再关心操作数据的细节, 而把中心放在业务逻辑上, 避免了ADO.NET的复杂性。如果有一个复杂的应用需要用到几个不同的数据库, DAO可以建立一个一致的API, 让系统的其他部分来调用。实现了应用系统的数据库无关性, 是不是有点工厂模式的味道。

2 SQL Maps原理

提到SQL Maps原理, 不得不提到官方帮助文档给出的一副图, 如图1所示。

该图清晰地反映了i Batis的数据映射工作流程。左边是输入参数, 中间为记录在Sql Map.xml文件里面的SQL映射语句被SQL Maps组件通过Sql Map.config配置文件读入, 通过组件内封装的ADO.NET和数据库进行交互。输出右边的结果对象。

整个开发的重点就在XML描述的编写上, 其他的工作由SQL Maps组件来完成, 基本的步骤如下:

(1) 程序输入一个参数, 无论是对象还是一个原生类型。参数将被用于设置SQL语句或存储过程的运行时的值

(2) 通过传送参数和在XML描述中的声明名字或者存储过程来执行映射。这一步将是关键的步骤。i Batis框架将会准备SQL语句声明或者存储过程, 用参数设置运行时数据值, 即带入运行数据值, 执行SQL语句或者存储过程, 返回结果。

(3) 和ADO.NET一样, 当数据更新的时候, 更新的行数将会被返回。当数据查询的时候, 返回的将是一个对象或者对象的集合。结果对象或者对象的集合, 可以是一个普通对象或者原生类型, 通过XML描述中的参数来指定。

3 运行环境

i Batis基本的运行环境配置主要由两个文件组成, 分别是Sql Map.config和providers.config。它们是必需的两个配置文件, 其中Sql Map.config的功能类似于应用程序的web.config或者app.config, 是i Batis核心的配置文件, 靠它把XML描述文件载入给i Batis框架。默认情况下, 需要把该文件放在应用程序的运行目录下并且保留它的文件名称。如果改变名称或者存放在其他目录, 需要在程序里面额外手工指定。

providers.config是一个数据驱动提供类的配置文件, 提供了如常见的Oracle、Sql Server、Ole Db、Odbc、My Sql和Informix等数据库的数据驱动, 其他数据库可以通过增加相应的配置来添加。

Sql Map.config的结构如图2所示, 包括以下一些主要的配置节, 根据需要, 有的配置节并不是必须的。

use Statement Namespaces:是否使用语句命名空间, 这里的命名空间指的是映射文件中sql Map节点的namespace属性。即如果该参数设为“true”, 语句调用时需追加命名空间, 如:mapper.Update (“Test App.Update Post”, post) ;否则直接通过语句名称调用即可, 如mapper.Update (“Update Post”, post) 。但这时一定要注意, 此时需要保证所有映射文件中语句定义没有重名。可以通过变量来指定该参数设置, 如:, 参数通过properties属性来指定, 该值默认为“false”。

cache Models Enabled:配置是否启用i Batis的缓存机制, 默认是“true”。

validate Sql Map:配置是否启用Sql Map Config.xsd schema验证映射文件, 默认是“false”。

(2) providers:配置数据驱动提供类配置文件的路径和文件名。可以通过resource (或url、embedded, 它们分别是引用url和编译在程序中的资源文件) 属性引用进来。如:, 这3种载入方法说明如表1所示。

凡涉及到引用外部文件的都可以通过以上resource, url, embedded 3种方式实现。

(3) database:数据库的信息, 包括使用哪些数据库驱动和数据库连接字符串的配置。provider参数定义数据库访问所使用的provider.config文件定义的provider;data Source参数定义特定的数据库连接字符串。

(4) Sql Maps:指定XML映射文件的位置, 配置中可以出现多个Sql Map节点, 以指定项目内所包含的所有映射文件。如通过embedded方式指定

(5) properties:配置一些常量属性, 如:。如果这些属性有很多的话可以单独写一个文件里面, 再通过resource (或url embedded分别是引用url和编译在程序中的资源文件) 属性引用进来

(6) alias:类型别名的配置, 为了使用更方便的使用类 (类名更短) , 就需在这里进行别名的配置。如

(7) type Handlers:定义数据库类型到dotnet数据类型的处理, 不同的数据库都有一些特殊的数据库字段类型需要特殊处理, 就可以通过这个功能实现。通过它为该类型取一个名字, 并且指定对应的.NET类型来处理它。如

以上就是Sql Map.config的基本内容了。Provider.config文件的配置信息相对就很简单, IBatis.Net使用的是插件式结构来使用这些数据库提供程序, 每一个Provider对应于providers.config文件中定义的一个provider项。提供程序要求安装相关类库, 每一个provider元素都有"enabled"属性来控制是否启用这个providers。

4 日志处理

IBatis框架具有和Apache Log4Net一样的内部日志机制, 记录了与数据库的交互情况。可以使用框架内置的3个记录器 (No Op Logger, Console Out Logger, Trace Logger) , 或者使用像Apache Log4Net一样的外置记录包。为了让IBatis记录器工作, 必须在配置文件里 (App.Config或者Web.Config) 配置一些节点:

注册IBatis日志处理节点和log4net节点:

配置IBatis节点:

注意“”, 其Value值可以有以下几个选项:

inline:log4net节点在App.Config或者Web.Config文件中配置。

file:使用外置配置文件, 需要config File参数配合使用,

file-watch:与"file"一样, 只是多了一个监视外部配置文件的变动功能, 如果有变动则重新加载配置。

external:IBatis将不会尝试配置Log4Net。

需要特别注意一下, 如果采用file-watch外部文件配置的方式时, config File必须用绝对路径, 不能使用相对路径。

以采用inline方式为例, 只需要在App.config或者Web Config中配置log4net节点如下:

5 实例程序

官网上新加了一个例子程序Console Application1, 可以下载来学习。为了使大家一步一步更明白项目建立过程, 我们新建立一个例子程序。该例子程序功能为:通过网页输入查询参数, 程序通过i Batis查询Oracle数据库信息, 并把结果返回显示在页面上。

5.1 建立项目

打开Visual Studio 2012, 新建立一个ASP.NET Empty Web Application项目i Batis Test, Framework框架选4.0。

5.2 添加引用

通过官方网站下载“IBatis.Data Mapper.1.6.2.bin.zip”并解压, 在项目中添加下面dll的引用:IBatis Net.Common.dll和IBatis Net.Data Mapper.dll。因为要访问Oracle数据库, 还需要在项目中引入System.Data.Oracle Client.dll。

5.3 添加IBatis环境配置文件

把解压目录下的providers.config和sample.Sql Map.config拷贝到项目根目录, 并把sample.Sql Map.config改名为Sql Map config, 把两个文件加入项目。本例子程序采用“System.Data Oracle Client”连接Oracle数据库, 打开providers.config, 找到名称为“oracle Client1.0”, 修改enabled参数为"true"实启用该数据库驱动配置。

5.4 建立表

在Oracle数据库中建立xxzx.post表, 脚本如下:

插入测试数据, insert into XXZX.POST (id, username, posttime) values (10, '管理员', sysdate) ;

5.5 添加XML映射描述文件

向项目新增XML文件Post.xml, 修改XML文件内容, 如图3所示。

5.6 编写调用程序

向项目新增Web Form文件default.aspx, 在页面添加控件, 如图4所示。

在default.aspx.cs增加IBatis Net.Data Mapper的using应用。

增加查询按钮控件事件, 代码如下:

编译项目, 特别注意, 因为是64位操作系统下, 安装的Oracle客户端也是64位, 需要修改调试环境, 采用操作系统IIS来调试。具体操作为, 打开项目属性栏, 选择Web选项卡, 去掉Use IIS Express选项。Project Url栏输入http://

localhost/i Batis Test。

运行项目时还是会提示数据库驱动程序不对, 这是因为安装的System.Data.Oracle Client.dll版本和providers.config中记录的版本不一致, 通过Assembly读取System.Data.Oracle Client.dll文件Full Name, 并把该值填入providers.config文件oracle Client1.0驱动的assembly Name参数。读取代码如下:

运行程序, 在ID值框里面输入“10”, 点击查询按钮, 就会返回正确的查询值, 结果如图5所示。

5.7 增加日志记录

加入IBatis Net.Common.Logging.Log4Net.dll引用, 根据IBatis日志处理机制, 在web.config文件里面注册IBatis日志处理节点和log4net节点, 配置IBatis节点和log4net, 注意注册IBatis日志处理节点和log4net节点需放在根元素的第一个子元素。

再次运行并执行程序, 在根目录就会生成log.txt文件, 文件里面记录的IBatis运行是调试信息, 内容如图6所示。

6 结语

实例程序在Windows7 (64位) +VS2012+Oracle 11g (64位) 上测试通过。通过实例程序可以看出, 只要配置好XML映射文件, 程序调用时只需要简单的几行代码就可以实现对数据库的查询操作, 大大的简化了对ADO.NET的操作。IBatis便捷和高效。

C#环境 篇2

一、.NET环境与IDL简介

1.. NET环境。

.NET环境是微软公司最近推出的一个全新概念, 它支持下一代Internet可编程结构。.NET是一个革命性的新平台, 它建立在开放的Internet协议之上, 采用了许多新的工具和服务。简而言之, .NET环境是1种面向网络度支持各种用户终端的开发平台环境。C#语言是微软公司于2000年7月发布的一款专门为.NET环境而开发的编程语言。作为.NET环境的通用开发语言, 它能够建造所有的.NET应用。它是一个高效、安全和灵活的现代化程序设计语言。基于C#语言上述优点, 本文, 笔者选择C#语言作为.NET的开发语言。.NET环境采用统一的集成开发环境Visual Studio, 本文, 笔者的开发环境即为Visual Studio2005。在进行.NET应用程序开发时, 可以方便地引用他人提供的外部程序集。从而, 可以方便地实现程序的调用。

2. IDL。

IDL是美国ITT公司推出的一种可视化语言, 它具有较强的数据分析和可视化能力。在IDL语言中往往只需要几条语句就能执行大量、复杂的数据处理或者实现二维、三维图形的绘制, 而这在其他语言中需要上百条语句才能实现。通过IDL链接外部程序、或者将IDL作为其他语言的外部程序或图形引擎, IDL可以成为现有开发工具强有力的补充。在应用程序开发中实现IDL与其他语言的相互调用, 使得语言之间可以得到优势互补, 从而大大加快程序的开发进程。此外, IDL还可以方便地调用ENVI函数, 实现复杂的图像处理功能, 大大节省了系统的开发时间。

二、在C#语言中调用IDL的方法

1. 图形显示模式。

IDLDraw Widget (只用于Windows平台) 是IDL提供的可被嵌套在任何Active X语言控件的程序。IDLDraw Widget提供了其他语言调用IDL语言的机制。.NET环境支持新的组件标准Assembly, Assembly兼容Active X的机制, 可以通过封装Active X来实现。基于这种机制, 就使得在.NET环境中集成IDL成为可能。在这里, 需要注意的是, IDLDraw Widget在IDL6.4以后的版本中已经被ITT公司所放弃, 并不再更新, 所以一些新的IDL功能在IDLDraw Widget将无法调用。调用的方法:首先, 在应用程序添加IDLDraw Widget。其次, 初始化IDLDraw Widget。最后, 通过IDLDraw Widget调用IDL。具体程序如下:

在IDLDraw Widget控件初始化完毕后, 就可以利用Execute Str方法来执行IDL命令了。IDL命令可以是IDL语句也可以是IDL代码文件或者是已经编译好的.SAV文件。具体程序如下:

IDL与C#之间的数据通信是系统开发的关键。IDLDraw Widget提供了IDL与外部应用环境之间的数据传输机制, 使得IDL与外部程序之间的数据传输变得十分简单。IDLDraw Widget与C#数据传递方式如下所示:首先, 通过Set Named Data在C#下进行IDL中变量的创建。Get Named Data在C#下进行IDL变量读取的具体程序如下:

其次, 通过Set Named Array在C#语言中进行IDL中变量数组的创建, 通过Copy Named Array在C#语言进行IDL中变量数组的读取。具体程序如下所示:

最后, 使用Execute Str方法执行命令行, 同时传递数据。具体程序如下:

在.NET环境中, IDLDraw Widget通过“自动事件”属性独占IDLDraw Widget所产生的事件。此时, C#语言无法获取IDLDraw Widget上所产生的事件。IDLDraw Widget的“自动事件”属性包括On Init、On Expose、On Button Press等内容。若需IDLDraw Widget响应事件时, 需指定“自动事件”属性的IDL过程或函数。若需要C#语言对事件做出响应, 可通过设置IDLDraw Widget的Register For Events方法来屏蔽IDLDraw Widget的“自动事件”属性, IDLDraw Widget便可在其控件区域响应.NET的标准事件, 如Mouse Up、Mouse Down和Mouse Move等件。

2. 功能调用模式。

若系统开发无需IDLDraw Widget程序提供的可视化窗口, C#语言可直接使用IDL提供的COM组件IDLDRAW3Lib来调用IDL。COM组件是微软公司为了计算机工业的软件生产更加符合人类行为方式而开发的一种软件开发技术。在COM组件下, 人们可以开发出各种各样且功能专一的组件, 然后将它们按照需要组合起来, 构成复杂的应用系统。IDLDRAW3Lib组件的用法与图形显示模式基本相同:首先, 在应用程序中添加IDLDRAW3Lib组件。其次, 初始化IDLDRAW3Lib组件。最后, 通过IDLDRAW3Lib组件调用IDL功能。IDLDRAW3Lib组件的数据传递方式与IDLDraw Widget程序的传递方法相同, 在此就不再赘述了。

3. COM_IDL_Connect组件。

COM_IDL_Connect组件是IDL提供的另一种COM组件。COM_IDL_Connect组件提供了对ENVI/IDL现有功能调用的支持。COM_IDL_Connect组件的数据传递方式与IDLDRAW3Lib的数据传递方式相似。COM_IDL_Connect组件的用法亦与IDLDRAW3Lib的图形显示模式相同。首先, 在应用程序中添加COM_IDL_Connect组件。其次, 初始化COM_IDL_Connect组件。最后, 通过COM_IDL_Connect组件调用IDL功能。

4. 输出COM组件。

IDL是1个COM组件, 利用COM技术可以将IDL图形功能嵌入到C#、VB、VC等编写的Window程序中。借助IDL的对象输出向导功能可以在其他软件程序中很容易地使用IDL的可视化和分析功能, 且无需进行跨平台整合所需的编程工作。IDL对象输出向导可输出对象、方法和参数, 然后自动包装指定的IDL对象, 它可以很容易地将其导入到本地COM客户端应用程序, 缩短了接口开发的时间。使用IDL输出向导导出COM的步骤如下:

(1) 定义IDL对象并将类定义文件的路径添加到IDL路径中。

() 将语言编译器路径添加到电脑环境变量中。

(3) 将类定义文件加载到输出向导中, 并选择工程类型为“输出COM”。

(4) 设置输出对象的参数、过程与函数。

(5) 编译输出对象。

(6) 生成*.DLL和*.TLB文件。

(7) 在CMD环境中使用regsvr32对*.DLL文件进行注册。

.DLL文件的用法与COM_IDL_Connect组件相似。首先, 在应用程序中添加已输出的COM组件。其次, 初始化COM组件。最后, 通过COM组件调用IDL。具体程序如下所示:

三、方法比较

图形显示模式和功能调用模式形象直观, 调用过程简单, 方便程序调试。而输出COM组件模式则需编写IDL对象, 打包输出COM组件, 并在.NET环境下调用COM组件。在.NET环境下调用COM出错时, 需不断重复上述整个过程从而导致程序调试过程繁琐, 提高了程序的开发难度。图形显示模式与输出COM组件模式可以在.NET环境下创建IDL的DRAW显示组件, 在实现可视化的同时也提供了ENVI/IDL的功能调用。但功能调用模式只提供了ENVI/IDL的功能调用, 并未提供可视化组件的调用。

四、系统应用

本文, 笔者采用IDLdraw Widget程序来实现图像3D显示、波谱曲线浏览建库、蚀变矿物信息提取等功能, 快速地完成了Image Infor系统的开发工作。Image Infor程序主界面如图1所示。

C#环境 篇3

由于可靠性高, 接口功能多, 体积小等优点, 单片机在机器人工业中得到了广泛的应用, 但是单片机无法单独构成完整的控制系统, 对于复杂的计算和实时显示各传感器的状态, 无友好的控制界面, 不利于监控。而在工业现场控制中一般是使用上位机与单片机组成分布式控制系统, 这就需要使用单片机的通讯技术。

本文设计的堆垛式机器人的监视及控制系统中采用以STC12C5A60S2为核心的机器人作为下位机, 完成传感器的数据采集及控制量的输出, 上位机采用个人计算机来完成传感器数据的处理及反馈, 路线规划, 状态显示, 执行部件检测等功能, 实现对堆垛式机器人的实时监视与控制。

为了实现STC12C5A60S2单片机与上位机的通讯, 有多种技术可以使用, 其中Visual C#2010是一套独立的windows32 X86架构的软件开发系统, 是可视化、面向对象、采用事件驱动方式的高级程序设计语言, 尤其是它提供了预置对象——COM通讯组件, 通过对该COM通讯组件的相关属性设置, 可以完成获取单片机的相关端口状态, 向单片机发送相关指令, 可以很方便的完成目标程序与单片机之间的通讯, 以实现稳定可靠地通讯。

二、STC12C5A60S2与上位机之间的通讯协议

通讯协议包含了两方面的内容:1、通讯接口, 2通讯方式。

STC12C5A60S2与上位机之间的通讯一般采用RS232接口实现, 在本例中使用MAX232芯片完成电平转换以实现COM口与单片机之间的通讯。通讯方式有两种:一种是上位机使用具有初始传送优先权, 所有的通讯指令均由上位机发出, 下位机始终处于被动状态, 另外一种单片机具有优先权, 命令有单片机发出, 本例中采用了两种结合的通讯方式。

单片机与上位机的通讯以帧为单位进行, 由于数据采集具有特殊性难以找到通用的协议, 根据设计需求设定发送数据位的通讯格式为:

以上通讯协议中每一均含8位数据, 由此可见每一次通讯使用9个字节, 具体的在单片机端的实现代码如下

通过在单片机中定时循环调用自定义的sendbyte函数实现定时发送单片机各端口的状态值。

三、上位机的数据接收及处理

在.NET Framework 4.0中提供了Serial Port类, 该类主要实现串口数据通信等。

其中重要的属性如下

SerialPort类的常用方法如下

通过以下代码将下位机发送的信息进行拆分校验

其中170, 90、165、106为设定的分割标志。

四、上位机对下位机的操控

在获取各传感器状态的基础上, 当机器人出现故障时, 运行通过人机界面来完成各执行电机的动作, 如托盘的进出, 巡线电机的前进后退, 手抓电机的张开或者收缩等。

上位机通过serialWrite ("g") 函数向下位机发送各种操作指令, 在操作前需对串口进行设置, 例如串口值、波特率等

在下位机中使用串口中断来接受各种指令, 具体指令如下

五、结论

通过对该机器人的监控程序的具体设计, 阐述了C#与单片机的通讯方式, 自定义通讯协议的定义方法, 程序设计方法, 系统运行表明, 使用C#提供的通讯控件设计的程序稳定可靠, 很好地满足了监控系统的设计需求, 由于篇幅所限, 仅列出核心通讯协议代码及控制代码。

摘要:单片机在机器人中有着广泛的应用, 但是由于计算性能欠佳, 无法完成复杂的功能, 需要使用上位机对其进行监控, 本文针对ZKRT-300机器人采用C#环境设计了监控程序, 就通讯协议及数据处理进行了论述.

关键词:单片机,C#,监控,程序设计

参考文献

[1]谈士力, 沈俊杰, 张海洪等.VB下的PLC通讯以及在壁面清洗机器人监控中的应用[J].机器人, 2001, 23 (2) :118-122.

[2]智少磊, 夏继强, 张炯等.基于OPC的服务机器人监控系统设计[J].计算机工程, 2012, 38 (14) :266-268, 271.DOI:10.3969/j.issn.1000-3428.2012.14.079.

C#在成长 篇4

C#读做"C sharp“, 是一种安全现代而又优雅的面向对象的编程语言。1999年原BROLAND公司的首席研发设计师Anders Hejlsberg在微软开发了Visua J++1.0, 很快的Visual J++由1.1版本升级到6.0版。由于微软违反了了许可证协议中的条款, SUN公司就microsoft违反了Java开发平台的中立性, 对微软提出了诉讼, 应而微软不得不停止对j++的研发。不过, 2000年6月26日微软在奥兰多举行的“职业开发人员技术大会” (PDC 2000) 上, 发表新的语言C#。C#语言取代了Visual J++, 语言本身深受Java、C和C++的影响。C#本身继承了C和C++强大功能, 同时将它们的一些复杂特性如宏和模板, 多重继承去掉了, 同时综合了VB简单的可视化操作和C++的高效率, 以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

2 发展

微软于2000年7月发布了C#语言的第一个预览版。因此人们一般认为C#是2000年发布的, 并以此来计算它的“年龄”。其实, 在此后的一年多时间里, 微软一直在修补各个测试版本中的BUG。直到2002年2月, 微软才推出了迟迟未上市的Visual Studio 7.0, 并将其定名为“Visual studio.NET2002”。伴随着这套开发环境, C#语言的第一个正式版本——C#1.0出现了。这一时期的C#提出了纯粹的面向对象概念它将所有对象自动的变成为COM对象, 以ASP和windows环境的紧密集成, 如果c#能取得很大的市场份额的话, 它将给ASP带来类似于Java的功能。Java尽管号称是面向对象的, 但实际上, 对于对象所应该具备的三种构成结构——属性、方法和事件, Java仅提供了方法, 其它两种结构都要通过方法来模拟。在C#1.x中, 所有面向对象的概念都在语言中得到了非常好的体现。

2004年的6月份发布了Visual Studio2005的第一个Beta版, 同时向开发者展示了C#语言的2.0版本。2005年4月, 微软发布了Visual Studio 2005 Beta2, 这已经是具备了几乎全部功能的Visual Studio, 包括的产品有SQL Server2005、Team Foundation Server和TEAMSUITO。这时的C#编译器已经能够处理C#2.0中所有的新特性。

2005年9月份的PDC大会上, 微软带来了研发代号—魔鬼的c#3.0。3.0的Lamda Linq, 集合对象初始化支撑起3.0的魔鬼代号。在C#3.0中, 我们可以用类似于SQL语句的语法从一个数据源中轻松地得到满足一定条件的对象集合。例如要查找一个字符串数组cat中所有长度为3的字符串, 就可以写:var long=from n in cat where n Length=3 select n;同时W PF, W C F, WF F等新技术的加入使c#发展的更魔幻WPF (下一代显示系统) , 它可以创建能带给用户震撼视觉的windows客户端应用程序, 还可以创建广泛的独立应用程序以及浏览器承载的应用程序。WPF的界面由可扩展应用程序标志语言 (XAML) 来实现, 在WPF中可使用dockpanel与border控件配合进行界面布局。

C#4.0新增dynamic关键字, 提供动态编程 (dynamic programming) :Dynamic Lookup动态查找, The dynamic type dynamic类型, Dynamic operations动态操作类似于Java Script把既有的静态物件标记为动态物件, 4.0的动态编程使得对象变的越来越“动态化”, 你无法通过静态类型捕获它们的结构和行为。例如:通过IDispatch访问的COM对象, 通过反射访问的一般.NET类型, 结构发生过变化的对象等。C#4.0中的新特性分为四组——动态查找Dynamic lookup, 命名参数和可选参数Named and optional parameters, 特定于COM的互操作特性COM specific interop features, 变性Variance。Dynamic类一种特殊的object类, 其定义的对象可以动态的使用:dynamic dn=1;int a=dn;dynamic dn=1;int a=dn;不仅是方法调用, 字段和属性访问、索引器和运算符调用甚至委托调用都可以动态地分派

如果你想体验一下4.0就装个visual studio 2010吧。4.0的动态编程, 可选参数使c#又发展到一个新的高度。c#如此迅猛地发展, 升级, 特别是荧光和WPF已得到大量使用, 在UI体验这一块, .NET已走在前面。确实让人感觉来势如虹, 但尽管如此, 仍有很多人认为:c#也就现在还行, Java发展前景广阔, java比.net要安全一些, 用的人多了, 也就发展, 完善了。因而现下大多数学编程的人都会选Java。

3 未来

C#实现屏幕截取 篇5

屏幕截取是图像编程的一个重要课题, 可将截取的屏幕作为图像存储在内存中。.NET提供了GDI+作为编程工具, 能够方便地将截取的屏幕以各种图像格式存储起来。目前, 在公开发表的C#屏幕截取编程中, 通常的效果都不好, 在此提供一种效果良好的C#屏幕截取编程方法。

2 API函数进行C#屏幕截取

在SDK platform中, 与此相关的API有GetDesktopWindow、CreateCompatibleDC、GetSystemMetrics、SelectObject、BitBlt、ShowWindow, 可将有关的API封装到相应的C#文件中, 如以下代码封装了CreateCompatibleDC的API函数:

3 存储

为将截取屏幕存储为多种图像格式, 引入了System.Windows.Forms.SaveFileDialog类, 对其Filter属性编程:

以下代码可实现将截取屏幕存储为多种图像格式:

4 实现代码

这样就可以效果很好地实现C#屏幕截取编程了。

5 总结

C#屏幕截取编程需要使用很多API编程, 使用单独封装的cs文件, 即可采用“分而治之”的策略降低编程难度。

(收稿日期:2009-3-16)

摘要:给出了一种效果良好的C#屏幕截取编程方法及其实现代码, 所截取的屏幕能够以各种图像格式存储起来。

C#开发邮件工具 篇6

在工作中, 邮件的发送和接收应该是经常要使用到的功能的。因此知道电子邮件的应用程序的原理也是非常有必要的, 在这一个专题中将介绍电子邮件应用程序的原理、电子邮件应用程序中涉及的协议和实现一个简答的电子邮件收发器程序。

2 邮件应用程序基本知识

2.1 电子邮件原理及相关协议

说到电子邮件的原理, 其实和现实生活中寄邮件和寄包裹是一样的原理的。就先回顾下现实生活中寄邮件的流程吧———首先, 先写好信, 信封上面写好收信人的地址, 写信人的地址, 然后把信放到寄信箱中, 邮局的人会某个时候去这个信箱中的信取出来, 然后邮局的人根据信封上写的收信人地址进行转发到当地的邮局, 当地邮局把信寄到收信人的信箱中 (寄包裹的话可能会电话联系, 像在淘宝, 京东买的东西的, 收货人就是通过电话联系一样) , 最后收信人会到自己的信箱中收取信件。上面大致是平时生活中寄信的一个流程。前面已经讲过电子邮件的原理和这个差不多的下面就介绍本专题中电子邮件的原理, 大家可以和现实生活中的寄信过程进行对比, 这样可以更加容易理解和掌握:

通过电子邮件应用 (例如基于客户端的Outlook电子邮件软件和一些基于Web的电子邮件系统———新浪邮箱、谷歌邮箱、QQ邮箱等都属于电子邮件应用) 将一封写好的邮件 (相当于现实生活中的信, 当然邮件也要写明收件人地址, 邮件内容等信息的) 通过电子邮件协议 (SMTP, 在后面的电子邮件相关协议中会介绍) 发送到SMTP服务器 (就是存储邮件的地方, 相当于生活中的邮局一样) , 然后SMTP服务器根据收件人的地址通过SMTP协议转发到相应SMTP接收服务器上, (SMTP服务器进行转发相当于现实生活中邮局的人配送信的过程, 配送到收件人当地的邮局, 然而现实生活中邮局都是一家, 所以可以相互识别———意思就是发送到当地邮局, 当地邮局会接收, 并且帮助你发送到指定人的信箱中, 在网上就是通过SMTP协议来规定这样的一个过程的, 发送到别人的SMTP服务器上别人的服务器必须要认识发送来的邮件并接收) 结束, 接收端邮件服务器 (POP3服务器) 把邮件存放到接受者的电子信箱内 (相当于当地邮局的人把信放到收信人的邮箱中) , 最后收件人可以登录自己的电子信箱, 再与POP3服务器进行连接, 从POP3服务器上下载发送来的邮件, 这样在收件人的电子信箱中就可以看到发送来的电子邮件了 (这就是现实生活中收信人从自己的信箱中取信的一个过程) 。

上面已经把电子邮件的原理和现实生活中寄信的过程进行对比, 相信大家可以更加清楚电子邮件的原理和发送接收过程的, 其实网络上的很多应用都可以以现实生活的例子去理解, 这样的话可以加深对知识的理解。下面就介绍下电子邮件中的相关协议的内容:

网络上的应用的核心就是协议, 因为协议让网络上的客户端相互认识发生来的数据, 所以电子邮件应用也不例外, 也有相关的电子邮件协议来完成发送电子邮件和接收电子邮件的过程, 这些协议主要是:SMTP (简单邮件传输协议, Simple Mai Transfer Protocol) 、POP3 (邮局协议, Post Office Protocol) 和IMAP (网络邮件访问协议, Internet Message Access Protocol) 。

(1) SMTP———SMTP主要负责将邮件从一台机器转发至另一台机器 (可以对照上面电子邮件的过程来理解SMTP的作用) 。

(2) POP3———3表示POP协议的版本, 主要负责将邮件从邮箱中 (POP3服务器) 传输到本地计算机。

(3) IMAP———现在常用的版本为第四版本, 即IMAP4, 主要负责邮件的检索和处理功能, 客户端不需要下载邮件到本地计算机, 可直接从邮件客户端软件对服务器上的信件和文件目录进行操作, 它是POP3的替代协议。

2.2 邮件系统分类

邮件系统主要分为两类的———基于客户端的邮件系统和基于Web浏览器的邮件系统。Office OutLook就是基于客户端的邮件客户端系统, 而像我们经常使用的QQ邮箱、新浪、网易邮箱等都是属于基于Web浏览器的邮件系统, 基于客户端的邮件系统的收发过程, 通过如图1所示来描述。

发送方通过邮件客户端, 将编辑好的邮件向邮件服务 (SMTP服务器, 在发送过程中也叫发送端邮件服务器) 发送, 发送端邮件服务器根据收件人的地址来识别接收端邮件服务器 (POP3服务器) , 然后向POP3服务器发送邮件信息, 接收端邮件服务器将邮件存放在接收者的电子信箱中, 并告知接收者有新邮件, 接收者通过邮件客户端与POP3服务器连接后, 就可以查看新邮件。

然而, 基于Web浏览器的邮件系统与基于客户端的邮件系统不同的地方如下:

(1) 基于Web浏览器邮件系统用户代理 (代理的概念也就是用户不是直接与服务器进行通信, 而是通过代理的方式, 让代理去与服务器通信, 然后用户在从代理中获的服务器的信息, 代理也就是中间人的作用, 相当于生活中中介, 在.net中很多技术都用到了代理, 例如委托的概念其实也就是代理的一个概念的) 是Web浏览器, 基于客户端的邮件系统而是邮件客户端应用程序, 一般是Windows Form程序。

(2) 浏览器发送邮件到SMTP服务器和从POP3服务器中获得邮件的方式都是通过HTTP协议来实现, 与基于客户端的邮件系统不同 (基于客户端的邮件系统发送通过SMTP协议或ESMTP (Extended SMTP) , 获得通过POP3或IMAP协议) 。

2.3 目前主要的电子邮件服务系统

电子邮件服务系统———就是向大家提供邮箱服务的服务系统, 这样的系统当然是由专门的公司进行研发的, 一般叫这样的公司为邮件服务商, 平常使用的网易邮箱, 新浪、Gmail邮箱等都是建立在电子邮件服务系统。现在主要电子邮件服务系统主要有下面几种:

(1) 基于Postfix/Qmail的邮件系统。例如, 雅虎邮箱基于Qmail系统。

(2) 微软Exchange邮件系统。

(3) IBM Lotus Domino邮件系统。

(4) Scalix邮件系统。

(5) Zimbra邮件系统。

(6) MDeamon邮件系统。

3. Net平台对邮件发送功能的支持

在.Net类库中, 在System.Net.Mail命名空间下定义了对邮件处理的类, 这样使邮件的发送更加方便 (这些类也就是对SMTP协议的封装, 使我们更好地区编程, 只需要使用类中的方法和属性等去完成邮件的发送, 避免写复杂的SMTP协议的命令) 。

C#提供了一系列邮件相关的类, 在这里就不一一介绍了, 大家可以参考MSDN去看每个类的使用, 并且在后面程序的实现部分也会有详细的注释去介绍程序中使用到类的使用。需要注意的是:C#提供的类中只有SMTP的字样, 却没有POP3这样的字样, 这说明.Net类库本身中并没有提供对POP3协议的封装类, 但是可以使用Jmail组件来完成从POP3服务器中收取邮件的功能, 具体的使用将在后面的邮件收发器程序中邮件的接收部分介绍。

4 邮件收发器程序的实现

4.1 邮件发送功能

4.1.1 SMTP协议

SMTP协议是用于电子邮件的传输的协议, 电子邮件是通过SMTP服务器进行发送的, SMTP服务器的默认端口为25, 通常发送邮件有两种方式———一种是不使用客户端认证, 即客户端可以使用匿名发送邮件 (这种方式叫做SMTP) ;另一种是客户端必须提供用户名和密码认证 (这种方式叫做ESMTP, Extended SMTP) 目前大部分邮件服务器采用用户名和密码认证的方式。

客户端发送邮件过程为———先通过客户端软件 (本程序中的邮件收发器) 将邮件发送到SMTP服务器, 然后再由SMTP服务器发送到目标SMTP服务器。下面介绍SMTP协议的内容:

SMTP协议总共定义了14个命令, 命令由命令码和气候的参数域组成, 不区别大小写 (通过前面专题的讲述可以得出各个协议的命令组成都差不多的) , 表1就简单介绍下5个常用的命令码:

电子邮件由信封、首部、正文和结束符号4部分组成, 下面就具体介绍下这4个部分的内容:

(1) 信封

信封包括发信人的邮件地址和接收人的邮件地址, 具体对应两条SMTP命令———Mail from:mytest1989@sina.cn (发信人的地址) 和Rcpt to:test@126.com。

(2) 首部

首部中常用的命令有:

1) Subject:<邮件主题>———表示邮件的主题。

2) Date:<时间>———表示发邮件的时间。

3) reply-to:<邮件地址>———表示邮件的回复地址。

4) Content-Type:<邮件类型>———表示邮件包含文本、HTML超文本和附件的类型。

5) X-Priority:<邮件优先级>———表示邮件发送的优先级, 优先级为3表示为普通邮件;如X-Priority:3。

(3) 正文

正文当然指的就是邮件的内容了, 用Data命令指定, 首部以一个空行结束, 下面就是正文部分。

(4) 结束符号

邮件以“."结束,

接收方收到SMTP命令之后, 会给出一个响应码, 每个命令都只有一个响应码, SMTP响应码也是由3位数字组成, 后面附加一些文本信息, 响应信息的格式为:

响应码<空格>文本信息<回车换行>

客户端发出一条命令后, 服务器端返回一个响应, 发送者在发送下一条命令前必须等待服务器的响应, 成功接收到响应码后才继续发送命令。

附:SMTP常用的响应码:

响应码解释响应码解释

211系统状态或系统帮助响应421服务未就绪, 关闭了传输通道

214帮助信息501参数格式错误

220服务就绪502命令不可实现

221服务关闭传输通道535用户验证失败

235用户验证成功553邮箱名不可用, 要求的操作未执行

334等待用户输入验证554操作失败

354开始邮件输入

4.1.2 邮件的发送过程

(1) 客户端与服务器建立连接 (该步中客户端首先发送EHLO local连接命令, 服务器如果返回“220”响应码表示服务器准备就绪了, 客户端再继续发送“Auto login”命令, 请求登录, 服务器收到命令后返回“334”响应码, 表示要输入用户名, 之后客户端发送用户名命令, 等到响应后再发送密码命令, 具体在程序的实现中也会有注释。)

(2) 客户端发送邮件的信封。

(3) 开始发送邮件数据, (包括邮件首部, 正文和结束符号, 注:结束符号要单独占一行, 表示邮件发送结束) 。

(4) 客户端与服务器断开连接。

4.1.3 发送功能的实现代码

相信有了上面的理论解释邮件发送的过程后, 实现邮件发送的功能并不难的, 并且.net类库中SMTPClient类封装了SMTP协议, 使得实现邮件发送功能就不要记住那些具体的命令了, 只需要使用该类中提供的方法来完成邮件的发送 (当然你也可以通过发送命令的方式实现, SMTPClient类的方法也是完成发送命令功能而已的) , 下面是邮件发送功能的核心代码:

4.2 邮件接收功能

4.2.1 POP3协议

前面介绍了邮件的发送, 当然接收者需要登录邮箱来查看收到的邮件了, 此时就必有有一个协议去读取服务器上邮件, POP3就是这样的一个协议。还有两外一种协议也是用来接收邮件的———IMAP协议, 它与POP3协议区别有:

(1) IMAP使用的端口号是143而POP3邮件服务器通过监听110端口来提供POP3服务。

(2) IMAP允许客户端在邮件服务器上建立文件夹来保持邮件, 而不用把邮件下载到本地。而POP3需要把邮件下载到本地。和SMTP协议一样, 客户端要通过POP3协议从POP3服务器上获取邮件, 也需要先与POP3服务器建立TCP连接, 等待服务器向客户端发送确认信息表明连接成功时, 客户端才可以继续发送命令给服务器来获取邮件, 在POP3协议中, 规定的命令也是几十条的, 每条命令由命令和参数两部分组成, 都是以回车换行结束, 并且命令和参数之间由空格分隔, 命令通常也是由3-4个字母组成, 参数最多可以为40个字符的长度, 而服务器的响应信息是由一个状态码和可能附加信息的字符组成, 所有的响应信息也是以回车换行结束的。状态码和其他协议定义的状态码有点不一样, POP3服务器响应的状态码有两种———“+OK” (确定) 和"-ERR" (失败) 。这样客户端可以通过检查响应的状态码所包含的字符来判断服务器是否响应客户端发送的命令, 即响应信息中包含“+OK”表示成功响应, 包含“-ERR”表示服务器未响应。同时在程序的实现中大家可以通过Debug来查看响应消息的组成, 这样可以加深理解。

4.2.2 邮件接收的过程

客户端从服务器接收邮件的过程主要经历3个状态:授权状态、操作状态和更新状态

(1) 授权状态———客户端发送与POP3服务器的TCP连接请求, 服务器接收后发送一个响应确认信息之后, 此时客户端需要发送正确的用户名和密码进行确认, 因为在邮件服务器上有很多用户邮箱, 只有提供正确的用户名和密码才有权限访问自己的邮箱, 就像现实生活中邮箱的钥匙一样的。

发送用户名命令:USER test@s126.com

发送密码命令:PASS****** (这两个命令都在代码中有给出的, 大家可以参考代码来理解邮件的接收过程)

(2) 操作状态———如果客户端提供了正确的用户名和密码, 则授权状态也就通过了, 就相当于打开了在服务器上自己的邮箱, 现在用户就有权限进去下载, 查看和删除邮件等操作, 然后在现实生活中的取邮件和删除邮件都很简单 (只要打开了邮箱门, 用手去拿就可以了) , 然后在网络应用上, 这些操作都需要发送POP3命令给服务器, 服务器接收到命令后再给出响应。操作中常用的命令有:

1) STAT命令———该命令从服务器中获取邮件总数和总字节数, 服务器响应命令返回邮件总数和总字节数

如:

?

客户端发送POP3命令:STAT

服务器响应命令:+OK 2 1340
服务器响应命令。

2) LIST命令———该命令从服务器中获得邮件列表和大小, 服务器响应命令返回列出邮件列表和大小。

如:

?

客户端发送POP3命令:LIST

服务器响应命令:+OK 2 message (1430 octect)

服务器响应命令:1700

服务器响应命令:2730

服务器响应命令:<一个空行>

3) RETR命令———该命令从服务器中获得一个邮件, 格式为RETR<邮件编号>

如:

?

客户端发送POP3命令:RETR 1

服务器响应命令:700 octets

服务器响应命令:<邮件头和内容>

服务器响应命令:<空行>

4) DELETE命令———该命令告诉服务器将邮件标记为删除。 (此时只是逻辑删除)

(3) 更新状态———客户端发送QUIT命令后, 此时就进入更新状态, POP3服务器释放在操作状态中取得的资源, 并将逻辑删除的邮件进行物理删除, 然后关闭与客户端的TCP连接。这样整个邮件处理的过程就结束了。

4.2.3 接收功能的实现代码

有了前面接收邮件过程的介绍, 再参考代码的实现, 相信大家可以更好的理解客户端从POP3服务器中获取邮件的过程, 由于.net类库并没有封装POP3协议的实现类, 要实现邮件的获取可以采用发送命令的方式, 也可以使用Jmail组件, 这个组件其实就是POP3协议的封装类, 既然微软没有做, 其他公司做好后来并简单的实现邮件的接收的一个类库罢了。然后在使用这个组件的过程中出现了好几个问题, 在源码中都做了解释, 大家可以下载源代码后查看。

实现邮件接收的核心代码如下:

4.3 程序运行结果

首先输入邮箱名和密码登录到POP3服务器来获取邮件列表的演示, 如图2所示。

然后在邮件列表中选中一个邮件进行阅读, 然后进行回复邮件的操作演示 (邮件的发送都可以附加附件发送出去) :阅读邮件的界面, 如图3所示。

回复邮件的界面, 如图4所示。

同时点击发送按钮后, 就可以把邮件发送到sina的SMTP服务器上, 再由新浪的SMTP服务器转发到QQ的SMTP服务器, QQ的POP3服务器中QQ的SMTP服务器获取收到的邮件, 当QQ用户输入正确的邮箱名和密码后就可以从QQ的POP3服务器上获取收到的邮件。

点击发送按钮后成功发送邮件的图片, 如图5所示。

5 结语

用C#实现文件共享 篇7

高职教学用的计算机实验室大多是公用的, 不同的时间段使用班级及教师有可能不一样, 承担的实验任务也不同。课间休息有限, 教师教学过程中不可避免地涉及到学作业的存取及文件共享问题。如何让教师在尽可能短的时间内将学生作业收集及清理完毕, 是实验室要考虑解决的问题。另外, 教学中难免要对学生进行测试, 防范学生通过学生机之间的网上邻居共享资源或即时通讯软件作弊, 也是实验室要解决的问题。相似的问题在中小学的信息技术教育教学中也同样存在[1], 且在企事业单位同样具有文件互传与共享的需求[2]。

为解决以上问题, 有的通过第三方软件, 有的通过编程实现[1,2]。很多学校采用多媒体教学软件实现教师文件发送及学生作业提交的方法, 学生作业的收取需要学生完成发送教师才能接收, 在短短的几分钟内往往完成不了任务。

用批处理实现快速共享, 其中用户账户没有设密码, 在学生端用批处理进行网络驱动器映射时, 需将学生机上对应的批处理拖动到“启动”菜单, 启动计算机后进行自动映射[3]。但此方法存在一个缺点:批处理保存在学生机硬盘上, 将批处理放到启动菜单中, 学生容易从启动菜单查到该批处理文件的位置, 并将其打开, 查看批处理的内容, 存在安全隐患。如果将批处理隐藏, 重启计算机则批处理不起作用, 无法与服务器自动连接。按常规方法在windows窗体中设置共享[4,5,6], 重新启动计算机又要求输入密码。我们改进了方案, 使共享更安全;在学生机端映射网络驱动器方法上作了一些调整, 重启系统可自动映射网络驱动器而不提示输入密码。

1解决方案

软件环境:服务器操作系统为Windows Server2003, 文件格式可为NTFS或FAT32, 学生机操作系统为Windows XPProfessional SP3。

(1) 不同的实验室使用不同的网段, 保证不同实验室的教学互不干扰。

(2) 服务器、学生机都安装双系统, 两个系统装在不同的分区上。一个系统平时教学使用, 一个系统测试学生时使用。

(3) 两个系统安装的软件基本一样, 考试用的系统不安装即时通讯软件, 如QQ等。

(4) 平时教学用的系统用批处理实现共享, 服务器上的用户账号不设密码。测试学生使用的系统服务器上的用户账号需设密码, 提高安全性。

下文仅介绍测试学生所用系统的实现过程, 重点介绍改动的部分, 其他部分参看参考文献[3]。

2实现过程

2.1服务器端的操作

下文中提到的服务器名为:server1, 地址为:192.168.4.1。服务器中建56个用户, 账号名分别为user1、user2……user56, 密码统一为【123456】。建两个文件夹, 其中一个名为【试题】, 共享名为原文件夹名、【Everyone】组或用户对其具有读取权限。另一个非共享的文件夹, 名为【考试文件夹】, 再在其中新建56个文件夹, 文件夹名分别为:1、2、3……56。将每个文件夹设为共享, 共享名为原文件夹名, 一个文件夹只分配给唯一对应的用户, 该用户对它具有完全控制的权限。1对应user1、2对应user2……56对应user56。学生机的主机名依次为C1、C2……C56, 映射网络驱动器时, 1对应用C1、2对应C2……56对应C56。

(1) 批量添加有密码的用户

建立与学生机数相同的用户数, 用命令net user完成:

net user [password ] [/ expires :never][ /passwordchg:no] [/add]

参数介绍如下:

username:自定义的用户名

password:自定义的密码。

expires:never:设置帐户永不过期。

passwordchg:no:指定用户不能改变自己的密码。

add:将新建用户添加到用户帐号数据库。

例:net user user1 123456 /expires:never /passwordchg:no /add

该语句建立一个名为user1, 密码为123456的用户, 此账户永不过期且用户不能更改密码。

为方便计算机实验室的管理, 我们为所有用户定义相同的密码。批处理中的语句条数与用户数一致, 只需改username就可以了。

(2) 设置【密码永不过期】

可在【计算机管理】窗口中设置, 但工作量大。我们采用命令进行设置:

将外部命 令NETUSER.EXE复制到文 件夹C :WINDOWSsystem32中。

netuser username /pwnexp:y

参数介绍如下:

username:是用户名

pwnexp:设置密码永不过期

可在第 (1) 步创建的批处理文件尾添加命令行, 减少批处理文件的数量。

在服务器端双击运行批处理文件, 就添加了相应的用户。查看用户属性, 看到“用户不能更改密码”及“密码永不过期”被选中。

(3) 创建文件夹及设置其属性

1在指定的驱动器根目录下建立文件夹“试题”。

2设置文件夹“试题”的属性

右击文件夹“试题”, 从快捷菜单中选择“安全和共享”, 设置其共享属性为“共享此文件”, 共享名可自定, 我们的共享名与文件夹相同。其它属性分别为:“允许最多用户”、“读取”、Everyone。

3建立【考试文件夹】

此文件夹的位置必需要放在不加保护的硬盘分区中。

4批量建立共享文件夹

用md命令创建批处理文件, 命令条数与学生机数一致。

md [drive:]path

[drive:]是驱动器名, path是路径。

例:md e:考试文件夹1

在E:盘“考试文件夹”中创建一个名称是“1”的文件夹。

4设置文件夹共享属性

用命令net share设置共享。

例:Net share 1=E:考试文件夹1 /grant:user1, full

其中, “=”号左边是文件夹的共享名, “=”号右边是文件夹的绝对路径。赋予用户user1访问权限为full。查看文件夹“1”属性中的共享权限, 用户user1对它有完全控制的权限。

(4) 组策略设置

保证组策略中“网络访问:本地账户的共享和安全模式”的安全设置为默认值“经典-本地用户以自己的身份验证”。

2.2客户端 (学生机) 的操作

以超级用户Administrator身份本地登录学生机, 为学生机映射网络驱动器。

在学生机设置两个映射动器, 一个用于学生存放文件, 另一个用于学生获取教师共享文件。服务器上的用户账号设置了密码, 我们尝试了两种方法为学生机映射网络驱动器, 下面分别给予介绍:

2.2.1用批处理实现映射网络驱动器

(1) 映射网络驱动器用于学生存放文件

用命令net use编写映射网络驱动器的命令:

net use or [“password”] [/user:username]

参数说明如下:

:映射网络驱动器名

:服务器IP地址

computer name:服务器的计算机名

sharename:共享名

password:登录账号的密码

username:登录服务器的账号

例:主机名为C1的学生机的批处理文件【1.bat】中命令: net use I:192.168.4.11 "123456" /user:"server1user1"

net use H:192.168.4.1试题 "123456" /user:"server1user1"

I:和H:是在学生机上显示的驱动的名称56台计算机统一, 具有可读写的文件夹映射为I:, 具有只读权限的文件夹映射为H:。192.168.4.1为服务器server1的IP地址, 也可将IP地址替换成服务器的计算机名。1为服务器中共享文件夹的共享名, 123456为密码, server1user1指定以user1用户账户登录到服务器server1。其它学生机上的批处理大同小异, 需要更改的是对应的共享受文件夹名及用户名即可。

(2) 双击运行编写好的批处理文件, 即可创建映射。

(3) 重命名网络驱动器的名称分别为I:和H:。

(4) 将存在硬盘上的批处理文件拖动到“开始”按钮的启动项。

用此方法映射的网络驱动器, 学生机重启后会自动连接, 不用再次输入密码。批处理文件存在硬盘上, 学生通过启动项可以查到批处理的内容, 存在安全隐患。

2.2.2通过编写C#代码映射网络驱动器

主要程序代码:

private bool ConD ir (string Name, string Path)

{

try

{

System.Diagnostics.ProvessS tartI nfopsi=newSystem.Diagnostics.ProcessS tartI nfo () ;

psi.FileN ame=@”cmd.exe”;

psi.Arguments=@”/c net use”+Name+””+Path+””;

psi.WindowS yle=System.Diagnostics.ProcessW indowS tyleH idden;

System.Diagnostics.Process.Start (psi) ;

return true;

}

catch (Exception ey)

{

return false;

}

}

2.2.3学生文件的收取及共享文件夹中内容的清除

(1) 学生文件的收取

学生文件的收取只需将“考试文件夹”复制粘贴到指定的地方即可。

(2) 清理【考试文件夹】中的学生数据

1建立【批量删除文件夹.bat】文件

rd [/s][/q][drive:]path

/s用于删除目录树。除目录本身外, 还将删除指定目录下的所有子文件夹和文件。/q为安静模式, 带/s删除目录树时不要求确认。

2删除共享文件夹

在学生机与服务器断开连接时运行“批量删除文件夹.bat”文件, 即可将学生文件夹删除。

3重新创建共享文件夹

运行批处理重新创建对应的文件夹, 即可将删除掉的文件夹重新创建, 且共享属性会自动恢复。

2.2.4禁止学生机间通过网上邻居访问

在每台学生机上运行“gpedit.msc”, 打开【组策略】窗口。展开【Windows设置】|【安全设置】|【本地策略】|【用户权利指派】, 右击【从网络访问此计算机】, 弹出【从网络访问此计算机属性】|【本地安全设置】|选中【Everyone】|【删除】|【确定】|【是】, 将安全设置中默认的用户组【everyone】删除, 达到禁止学生机之间通过网上邻居访问的目的。然后将组策略及注册表锁定, 防止学生私自修改。

3结束语

经过多年的实践, 用我们的方案实现文件共享, 安全简便。教学过程中让学生将文件存储在指定的网络驱动器上, 学生文件收取只需教师在服务器端复制一个文件夹就行了。中小学及大学的计算机公共实验室, 教师及学生的流动性大。此方法不需增加额外的代价, 简易、经济、实用, 对企事业单位也具有一定的实用价值。

摘要:对计算机公共实验室文件共享方法进行了研究, 实验室学生用机操作系统为Windows XP, 服务器操作系统为Windows 2003。通过批处理及C#编程实现在学生机上使用密码映射网络驱动器, 且重启系统后学生机与服务器自动连接不必再次输入密码。修改组策略禁止学生机之间的网上邻居共享, 提高安全性。学生文件直接存放在网络驱动器中, 教师只需在服务器上简单操作即可将学生作业收集及清理, 提高收集作业的效率。

关键词:文件共享,映射网络驱动器,自动连接

参考文献

[1]陈宇云.我的机房教学文件管理方案[J].信息技术教育.2005 (11) .

[2]陈力.点对点局域网文件共享系统的设计与实现[J].电脑知识与技术.2011 (4) .

[3]韦丽霜, 李雄, 韦涛, 等.用批处理实现简便快捷的机房文件共享存取方案[J].电脑知识与技术.2011 (3) .

[4]神龙工作室.新编Windows XP中文版入门与提高[M].人民邮电出版社.北京, 2007.8, 283-284.

[5]九州书源, 陈裕明, 梁蔚.一学就会魔法书玩转Windows XP[M].清华大学出版社.北京, 2007.4, 172-173.

上一篇:游戏课程下一篇:边境城镇建设