C/S架构 外网访问内网的问题(50)

  • 主题发起人 主题发起人 Ekin
  • 开始时间 开始时间
E

Ekin

Unregistered / Unconfirmed
GUEST, unregistred user!
C/S 的应用程序,局域网用没问题,如何在外地通过外网运行客户端并访问局域网内的数据库服务器。有些什么比较好的解决办法。
 
两种网,怎么能访问到啊?必须得让他们处于同一网络吧?1、要么作临时的VPN2、要么在局域网这边搞个什么动态域名(好像什么花生壳可以吧)3、要么用数据导入导出的办法
 
兄弟,我也正好在做这么个软件,我用indy TIdTCPServer/TIdTCPclient控件实现了客户端与服务端相互通信,那么用其它的控件进行数据的传导。
 
楼上兄弟, 用indy TIdTCPServer/TIdTCPclient控制通信。
 
可以统一的,给你一段我的程序: TSystemFixParam=record SQLServerDefaultPort:int; //SQL Server服务端使用的通信端口,默认是1433。 DBMachineOrIPAddr:string; //SQL服务器的名称或者IP地址,如果为空表示本机。 SQLServerDataBaseName:string; //数据库名称,不能为空。 SQLServerInstanceName:string; //SQL服务器的实例名称,如果为空,表示默认实例。 SQLServerLoginAccount:string; //SQL Server登录帐户名称,为空表示Windows登录。 SQLServerLoginPassWord:string; //帐户与密码,仅在使用混合认证时使用。可以使用 end;procedure TDM.ConnectToMSSQLServer;begin Connection.Close; with FSystemFixParam,Connection do begin //1、本地Windows认证方式: Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=WirelessMeterDB;Data Source=(local)/SQLServer2K //2、其它机器的Windows认证方式:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=WirelessMeterDB;Data Source=MachineName/InstanceName //3、本地SQL方式: Provider=SQLOLEDB.1;Password=MyPassWord;Persist Security Info=True;User ID=MyAccount;Initial Catalog=WirelessMeterDB;Data Source=(local)/SQLSERVER2K //4、其它机器的SQL登录方式:Provider=SQLOLEDB.1;Password=MyPassWord;Persist Security Info=True;User ID=MyAccount;Initial Catalog=WirelessMeterDB;Data Source=(MachineName)/InstanceName //ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=WirelessMeterDB;Data Source=LGB/FIRSTSQLSERVER2K;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LGB;'+ //'Use Encryption for Data=False;Tag with column collation when possible=False'; //Exit; if DBMachineOrIPAddr='' then//本地 begin if SQLServerLoginAccount='' then//没有帐户名称,表示以Windowds认证方式登录 begin ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;'+ 'Initial Catalog='+SQLServerDataBaseName+';Data Source=(local)'; if SQLServerInstanceName<>'' then ConnectionString:=ConnectionString+'/'+SQLServerInstanceName; end else//否则是本地混合认证登录 begin ConnectionString:='Provider=SQLOLEDB.1;Password="'+SQLServerLoginPassWord+ '";Persist Security Info=True;User ID='+SQLServerLoginAccount+';Initial Catalog='+SQLServerDataBaseName+';Data Source=(local)';// if SQLServerInstanceName<>'' then ConnectionString:=ConnectionString+'/'+SQLServerInstanceName; end; end else begin//否则SQL Server不在本机。包括局域网络和广域网络。 if SQLServerLoginAccount='' then//没有帐户名称,表示以Windowds认证方式登录 begin //WirelessMeterDB ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='+SQLServerDataBaseName+';Data Source='+DBMachineOrIPAddr; if SQLServerInstanceName<>'' then ConnectionString:=ConnectionString+'/'+SQLServerInstanceName; end else begin//否则是混合认证登录 ConnectionString:='Provider=SQLOLEDB.1;Data Source='+DBMachineOrIPAddr; if SQLServerInstanceName<>'' then ConnectionString:=ConnectionString+'/'+SQLServerInstanceName; ConnectionString:=ConnectionString+','+IntToStr(SQLServerDefaultPort)+ ';Network Library=DBMSSOCN;Initial Catalog='+SQLServerDataBaseName+ ';User ID='+SQLServerLoginAccount+';Password="'+SQLServerLoginPassWord+'"'; end; end; end;end;
 
申请个固定ip 做数据库服务器,直接连就可以了,有人说找个花生壳软件解析,我是直接连得,确实是连上了 ,不过速度是个问题,还有响应太慢了,就是当做个试验,如果要考虑安全性,我想知道怎么做更稳定。
 
我是直接连得,开1433,用花生壳、固定ip可以的,有点慢。也想问下做三层是否比较好点
 
用INDY做跨网段数据库系统,这是唯一的出路,不要迷信花生壳那些东西,不方便。用TCPCLIENT,TCPSERVER这对活宝也可以,实在高手,就调SOCKET API吧
 
用2003 server的远程桌面,大家认为如何?请一起探讨
 
观注。我喜欢这段说词:用INDY做跨网段数据库系统,这是唯一的出路,不要迷信花生壳那些东西,不方便。用TCPCLIENT,TCPSERVER这对活宝也可以,实在高手,就调SOCKET API吧
 
1.用花生壳吧。解决域名问题;2.用TCPCLIENT,TCPSERVER解决安全性问题.3.三层架构.
 
后退
顶部