设为首页 加入收藏

TOP

用VC++实现企业网络数据共享(四)
2012-11-04 15:17:42 】 浏览:1439
Tags:实现 企业 网络 数据 共享
  3.3. 数据传输子模块的实现

  该模块以组件的形式提供给用户,属于DCOM范畴内的实现。用户只需要在其网络服务器上完成该组件注册,就可以根据该组件的调用说明进行数据传输的实现。


图三:数据传输子模块实现流程

  该模块的开发使用ATL,下面阐述具体开发过程:

  1>. 基于Visual C++(www.cppentry.com) 6.0工具建立ATL工程,本文将其定名为dbftp,组件基于MFC类进行编写,载体为动态链接文件并新建COM 接口提供外部调用;

  2>. 建新ATL类,本文定类名ftpmdb。因为要编写的是进程内服务器,在用户调用时起作用,所以新建的ATL类提供了可以方便用户定制的COM接口--Iftpmdb;

  3>. 定制COM接口的方法和属性,增加方法getmdb,属性errorstring,方法函数是数据传输的实现,属性是出错原因,因此,外部调用时,使用getmdb方法以后,需读取errorstring获得调用结果。最后,在ftpmdb类中添加CComBSTR类型的成员变量errorstring;

  4>. 进入getmdb函数添加执行代码,另外,需注意此函数所在文件需将MFC中负责网络通信类的头文件afxinet.h包含入内,函数算法按步骤简述如下:

  1)接口提供连接和本地配置信息,为BSTR类型字符串,需转换为CString类型,以方便向MFC的网络类函数传递参数,示例如:

CString serverip=url;

  2)需建立新的Internet会话并进行FTP连接,同时可以开始接收连接错误代码,如下:

CInternetSession * session=new CInternetSession; CFtpConnection * conn;
try {
 conn=session->GetFtpConnection(serverip,user,pwd);
 /*进行ftp连接*/
}
catch (CInternetException* pEx) {
 TCHAR szErr[1024];
 if (pEx->GetErrorMessage(szErr, 1024)){
  conn = NULL; errorstring.Empty();
  errorstring.Append("连接字符有误! ");
  errorstring.Append(szErr);
  return S_FALSE;
 }
 /*获得异常,写errorstring采用Append方法*/
 pEx->Delete();
}

  3)设定当前服务器上Ftp目录,Wininet函数为:

conn->SetCurrentDirectory(serverdir));

  4)寻找标志文件打开获取标志以确定状态,决定是否传输:

CFtpFileFind flagfind(conn);
flagfind.FindFile("flagout.txt")
CInternetFile * dbfile=conn->OpenFile("flagout.txt");
//从文件中读取标志位
dbfile->Read(flag,1); dbfile->Close();
if(flag[0]=='0'){/*标志为0不需传输*/
 return S_FALSE;
}

  5)获取远程过渡数据库文件,Wininet函数为:

conn->GetFile(fname,localdir+fname,false))

  6)重置标志为0,写回服务器端标志文件,完成传输,结束会话:

flag[0]='0'; dbfile=conn->OpenFile("flagout.txt",GENERIC_WRITE);
dbfile->Write(flag,1); dbfile->Close();
conn->Close(); session->Close();

  5>. 编译后产生目标文件dbftp.dll,该文件即是组件的载体;

  6>. 在其他服务器上注册该组件:将DLL复制到服务器的Winnt\System32目录中,注册命令行为:regsvr32 dbftp.dll,注册成功后在注册表中可以查询到Dbftp.ftpmdb的键,此即在创建服务器组件对象需使用的字符串。

  上述六个步骤阐明开发并注册组件的过程,下面说明在网络编程(www.cppentry.com)中对其进行调用的方法,以ASP为例,阐述调用过程。

  以request方法获得连接信息,如:

url=trim(request("url"))

  创建服务器组件对象并调用方法进行传输:

set tempdb=server.CreateObject("dbftp.ftpmdb")
tempdb.getmdb
url,uid,pwd,servpath,"temp.mdb",localpath

  读取组件的errorstring属性,以response方法输出结果:

Response.Write tempdb.errorstring

  以上即为数据传输子模块的详细实现。

  4. 总结

  本文提出的企业网间数据共享机制解决了基于Internet的不同数据库产品之间的连接问题,同时给用户在数据共享方面提供很大的选择空间,提供的良好界面以及操作整合,降低了对网络管理人员在专业领域知识上的要求,提高了数据共享的实时性和工作效率。但本方法并未对传输的数据文件进行加密,所以在该方面的问题还有待解决。

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇密码漏洞原理及补丁程序设计 下一篇VC++中调用ADO的常用方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目