前提条件:A:客户端 ;B:中转服务器 ; C:数据库服务器。
A和B可连通;B和C可连通;但A与C不能连通。
    如果A和C可以连通,那么我可以用以下办法实现数据库的连接:
应用服务器:(C服务器)
1.建立一个新工程
2.在NEW ITEMS中的Multitier页中选取Remote Data Module
3.在远程数据模块中放置了Table1,DataSetProvide1,Sesson1并进行了相关的设置
4.编译客户端:(A服务器)
1.建立一个新工程
2.加入一个数据模块,并在数据模块中放置了DCOMConnerction1,DataSetProvider1,DataSource1并进行了相关的设置。这样A和C就可以实现简单的三层连接了。
    关键是现在A和C无法直接相连(IP不在一个网段),只能通过B中转。那么在B上应该放一个什么角色的程序才能实现A通过B中转连接C呢?请详细说明解决方案,最好有源码,或例子。解决问题的朋友将奉献200分,up不给分。

解决方案 »

  1.   

    以前只做过三层的,这个应该是四层吧,一下是我的想法如果B上对数据进行了大量的处理工作(应该是这样)则应该自己定义数据结构,而不使用dataset和datasetprovideer作为数据提供组件,而是让A调用B的方法,来得到数据。这样B上就应该只童工remote data module和clientdataset(从C上得到数据)就可以了。如果b没有做什么处理工作,只是为了安全起见(好像没有必要)那么b就应该室remote data module,clientdataset,dataset,datasource,datasetprovider,其实应该和c的结构差不多,只不过,c是直接从数据库中得到数据,b是从c中得到数据。
      

  2.   

    以前只做过三层的,这个应该是四层吧,一下是我的想法如果B上对数据进行了大量的处理工作(应该是这样)则应该自己定义数据结构,而不使用dataset和datasetprovideer作为数据提供组件,而是让A调用B的方法,来得到数据。这样B上就应该只童工remote data module和clientdataset(从C上得到数据)就可以了。如果b没有做什么处理工作,只是为了安全起见(好像没有必要)那么b就应该室remote data module,clientdataset,dataset,datasource,datasetprovider,其实应该和c的结构差不多,只不过,c是直接从数据库中得到数据,b是从c中得到数据。
      

  3.   

    你可以直接使用IdTcpClient和IdTcpServer组件传送数据,你可以在a和b之间使用IdTcpClient和IdTcpServer纯数据传递,和数据库无关,在b和c之间使用DCOMConnerction1,把a提交的请求发给c,然后把数据库返回的数据传给a
      

  4.   

    两位说的太好了,我就是这个意思,能不能说的更详细一些?
    To  idilent(准备去刷碗) :A怎样从B中得到数据,b怎样从c中得到数据?
    To   xiangzi8(祥子):IdTcpClient和IdTcpServer之间怎么传递?能否举一例子?
    谢谢!
      

  5.   

    既然用了三层,为什么还要 A 直接连 C 呢?那还不如用 C/S 了。
      

  6.   

    To:idilent(准备去刷碗)做过,但不是很理解,四层和三层的主要区别就是多出来的那层(B)与A和C的连接不同。我现在最想知道的就是这个,B与A和C的连接方法。
      

  7.   

    b和c的连接方法同三层种client和server的连接相同
    a和b的连接方法同三层种client和server的连接相同
    就是一层连一层很难吗?