网吧客户机如何进入网吧服务器
这个太简单了,知道了就ok了,打开我的电脑然后输入FTP的服务地址。格式为:ftp://(这里是IP)OK等下 弹出登入窗口就登入,知道的话就简单了。
不要做非法的事哦~~(百度文估子提示~)
一、1如果你只做数据交换的话你直接在一台服务器上做FTP服务,然后其他两台电脑就做FTP客户端,直接访问你FTP服务器,这样就可以太到你想要的效果了,还有一个就是你可以做一个SERVER-U,跟FTP差不多。2三台机要上网那就需要到一个路由器,路由器可以共享多台电脑上网。怎么设置的话这里简单也说不了,因为不知道你买的是什么牌的路由器。
二、你说要做像网吧那样无盘有盘系统,先说无盘,所谓无盘,顾名思义就是没有硬盘,那肯定要有一台电脑做服务器,为那些没有硬盘的电脑提供服务。
在Windows2000 Server 服务器上配置 NAT(网络地址转换)
NAT与ICS一样,主要用于家庭网络或小型办公网络,它可以使用多台计算机共享单个的Internet连接
网络地址转换包括:
1转换组件
它的作用是转换公用网络和专用网络的IP地址,转换专用网络和Internet之间转发数据包的TCP/UDP 端口号。
2寻址组件
寻址组件是简化的 DHCP 服务器,它可以为专用网络中的客户机分配IP地址、子码掩码、默认网关以及 DNS 服务器的IP地址。通常它的地址池中只包含20个左右的地址,如你将NAT服务器的地址设置为19216811,那么它的静态地址池中包含的地址往往是从1921681100-
1921681120。
3名称解析组件
名称解析组件充当专用网络上其它计算机的DNS服务器。当NAT服务器接受到专网上客户机的DNS请求时,它会将该请求转发到指定的Internet上的DNS服务器,并将响应返回给专用网络上的计算机。
一、配置服务器网卡
(1)在服务器上安装两块网卡,安装完毕后,"网络和拨号连接"文件夹中会出现两个连接:本地连接和本地连接2,为了方便操作,我们将这两个连接分别改名为“内网连接”和“校园网连接”。其中“内网连接”连接到内部网络的交换机端口,内网的所有计算机都连接在这个交换机上组成一个小型的局域网;“校园网连接”连接到校园网的交换机端口上,这个交换机连接到网络中心,从而连接到Internet。
(2)配置“内网连接”网卡:IP地址设置为19216811,子网掩码设置为2552552550,默认网关不配置,其它采用默认值。
(3)配置“校园网连接”网卡:IP地址设置为172181055(由网络中心分配),子网掩码设置为2552552550,默认网关设置为1721810254(由网络中心分配),DNS设置为1721811。在配置“校园网连接”网卡时注意,如果这时不配置默认网关,那就必须在路由和远程访问中配置默认的静态路由条目(后述)。
二、配置服务器NAT地址转换
(1)启动“路由和远程访问”:“开始”菜单->“程序”->“管理工具”->“路由和远程访问”。默认状态下,将本地计算机列出为服务器要添加其他服务器,请在控制台目录树中,右键单击“服务器状态”,然后单击“添加服务器”。
(2)右击要启用的服务器(这儿是本地服务器),然后单击“配置并启用路由和远程访问”,启动配置向导。
(3)跳过欢迎页面,下一步进入向导的公共设置页面。公共设置页面共有5项供选择:Internet连接服务器、远程访问服务器、虚拟专用网络(***)服务器、网络路由器、手动配置服务器。我们这儿选择“Internet连接服务器”,下一步。
(4)进入Internet连接服务器设置页面,有两项选择:设置Internet连接共享和设置有网络地址转换(NAT)路由协议的路由器。选择“设置有网络地址转换(NAT)路由协议的路由器”,下一步。
(5)在Internet连接页面,有两项选择:使用选择的Internet连接和创建一个新的请求拨号Internet连接。选择“使用Internet连接”,在下面的Internet列表中选项“校园网连接”,我们将让客户机通过这条连接访问Internet。下一步。
(6)完成向导,系统将启动路由和远程访问功能并完成初始化工作。
(7)如果我们在配置服务器网卡时已经给“校园网连接”配置了默认的网关,那么我们服务器的配置就完成了。如果没有配置,我们需要再配置一下静态路由。
(8)配置静态路由:“服务器”->“IP路由选择”->“静态路由”。右击“静态路由”,选择“静态路由”快捷菜单,调出“静态路由”配置对话框。在接口中连接“校园网连接”,目标与子网掩码均填写“0000”,网关填写“1721810254”,跃点数填写“1”。“确定”退出
三、客户端设置
客户端的设置比较简单,主要是IP地址设置。
(一)自动获得取IP地址
“控制面板”->“网络”,打开“网络”对话框。将网卡的TCP/IP属性设置为自动获得IP地址,自动获得DNS服务器地址。确定退出。
(二)人工设置IP地址
将计算机的地址设置为“19216812”,子网掩码为“2552552550”,网关为“19216811”,DNS服务器地址“1721811”,这儿也可以设置其它的DNS地址,不必一定要设置个地址的。确定退出。
(三)因为NAT服务器使用了自动分配地址的机制,因此在人工设置IP地址时要注意不要发生地址冲突。
四、测试连接情况
1、客户机Ping一下NAT服务器,包括ping 19216811与ping 172181055
2、客户机Ping一下路由器:ping 1721810254
3、服务器Ping一下客户机,如:ping 19216812
4、客户机打开IE测试一下网站访问情况,通常不会有什么问题的。
FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。
1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。
2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
5 FTP的工作方式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
下面介绍一个这两种方式的工作原理:
Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
简单上传下载实例(//为注释):
先假设有一FTP服务器,FTP服务器:qintithotnet,用户名:username 密码:user1234。在本地电脑D:盘创建一个文件夹"qint"。将要上传的文件复制到d:\qint里。通过FTP命令将文件从本地上传,从服务器下载的步骤如下:
1“开始”-“运行”-输入“FTP”
2open qintithotnet
/这一步可以与第一步合并,在“运行”里直接输入"ftp qintithotnet"。如果你的FTP服务器不是用的21默认端口,假如端口是2121,那么此步的命令应在后面空格加2121,即“open qintithotnet 2121”/
3username
/提示你输入用户名/
4user1234
/提示你输入密码,密码不回显,打完密码后回车即可。如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,将会出现第三步,你可以重新输入用户名和密码。/
5dir
/你成功登陆后就可以用dir查看命令查看FTP服务器中的文件及目录,用ls命令只可以查看文件。/
6mkdir qint
/在FTP服务器上根目录下建立qint目录。/
7cd qint
/进入目录qint,用“cd 你的目录名”可以进入当前目录的下一级目录,这跟DOS一样。/
8bin
/采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。/
9lcd d:\qint
/定位本地默认文件夹,在前面我事先在D:盘创建的。/
10!dir
/查看本地文件夹中的文件及目录/
11put i001jpg
/将当前目录(d:\qint)中的文件i001jpg上传到FTP服务器默认目录。可以用"mput "将所有文件上传到FTP服务器上。/
12get d123jpg
/将FTP服务器默认目录中的文件d123jpg下载到当前目录下(d:\qint)。可以用"mget "将所有文件下载到d:\qint/
13delete
/删除目录qint中的所有文件。/
14cd
/返回至上一级目录,即根目录。返回上一级目录用“cd ”要注意,中间有空格。返回根目录用“cd \”。/
15mrdir qint
/删除目录qint。删除目录,在此目录下不能有文件及目录,不然将无法删除。/
16bye
/退出FTP服务器/
上传下载时特别要注意服务器及本地电脑的当前目录,文件是从哪里到哪里的问题。查看FTP服务器的当前目录命令为pwd,可以用cd命令定位服务器的目录。可以用lcd命令定位本地电脑的目录。以上实例应用到了采用FTP命令行方式上传下载的最常用命令,你还可以用命令“?”查看更多的命令。
其实这个很简单
只要你的服务器和客户机的IP设置在同一网段就可以了啊,把路由器的LAN口当交换机使用就OK了
比如你服务器IP 19216812 客户机IP 19216813-254就行了,同一网段
掩码 2552552550 这样客户机就能连到服务器了
这篇文章将会说明如何以远程工作站上的用户身份激活com+对象,并以此用户身份访问Interface。
1、 Delphi默认com+对象的远程激活
Delph中远程com+对象激活一般通过TdispatchConnection及其子类来实现,实际代码中多用TDCOMConnection或TsocketConnectoion这两个组件,TDCOMConnection组件最终调用CoCreateInstanceEx创建com+对象。CoCreateInstanceEx (const clsid: TCLSID; unkOuter: IUnknown; dwClsCtx: Longint; ServerInfo:PCoServerInfo;dwCount: Longint; rgmqResults: PMultiQIArray): HResult。
TDCOMConnection在调用CoCreateInstanceEx时为pCoServerInfo参数中的pAuthInfo传递了Null值,因此TdcomConnection在创建Com对象时使用的是本地计算机登录者的用户令牌。假若A计算机上的登录用户Auser使用TDCOMConnection类连接远程计算机B上的com+对象,则B计算机会使用Auser的用户名/密码在B计算机上建立登录会话并最终创建com+对象。但是一台windows工作站上的本地用户只能在本地登录而无法在别的计算机上登录,因此A计算机上的Auser就无法在B工作站上建立登录会话,当然也就无法创建com+对象,此时远程工作站B会尝试用Guest帐户建立会话并使用该账户激活com+对象。在这种情况下,如果B工作站上的Guest账户没有启用或Guest没有激活com+对象的权限,你就会看见令人头晕的提示“拒绝访问”。看到这里你是不对现在网上最“流行”的dcom配置方法有所悟了呢。那个方法就是允许everyone访问、激活com对象、并且将“默认身份验证级别”设置成无。这种方法能够使你的com应用可以“用了”,但是,它可以上“任何人”访问。而且这种设置你将无法利用com+基于角色的安全访问控制功能。
2、怎样不用GUEST账户激活
这个问题的实际上应该是:怎样用远程工作站上的用户激活远程com对象。解决这个问题其实很简单:只要你在调用CoCreateInstanceEx时为它指定远程工作站上的用户名和密码,只要用户名/密码通过远程计算机的验证,并且该用户被授予了“远程激活”com+对象的权限,那么远程工作站会用该用户身份激活com+对象。看一下代码:
var
mts:IMTSXjpimsDB;
ov:Variant;
i:integer;
cai:_CoAuthInfo;
cid:_CoAuthIdentity;
csi:COSERVERINFO;
mqi:MULTI_QI;
iid_unk:TGUID;
idsp:IDispatch;
wUser,wDomain,wPsw:WideString;
begin
wUser:=edusertext;//用户名
wDomain:=edSvrText;//远程计算机名
wPsw:=edPswText;//密码
ciduser:=pUnshort(@wUser[1]);
cidUserLength:=length(wUser);
cidDomain:=pUnshort(@wDomain[1]);
cidDomainLength:=length(wDomain);
cidpassword:=pUnshort(@wPsw[1]);
cidPasswordLength:=length(wPsw);
cidFlags:=2;
//以上填充_CoAuthIdentity结构
caidwAuthnSvc:=10;//winNt默认的鉴证服务
caidwAuthzSvc:=0;
caipwszServerPrincName:=wDomain;
caidwAuthnLevel:=0;
caidwImpersonationLevel:=3;//必须设置成模拟
caipAuthIdentityData:=@cid;
caidwCapabilities:=$0800;
//以上填充_CoAuthInfo结构
FillChar(csi, sizeof(csi), 0);
csidwReserved1:=0;
csipwszName:=pwidechar(wdomain);
csipAuthInfo:=@cai;
//以上填充COSERVERINFO结构
iid_unk:=IUnknown;
mqiIID:=@iid_unk;mqiItf:=nil;mqihr:=0;
ScreenCursor:=crHourGlass; olecheck(CoCreateInstanceEx(CLASS_MTSXjpimsDB,nil,CLSCTX_REMOTE_SERVER,@csi,1,@mqi));
这段代码中除了最后实际调用CoCreateInstanceEx外,前面的代码都是设置参数。这些参数的含义请大家参考msdn,除了用户名、主机名、密码外,只有一个重要要部分要说明:caidwImpersonationLevel必须设置成允许模拟(值为3),否则远程计算机将无法按提供的用户/密码建议网络会话。
3、不修改现有代码,可以实现用远程用户身份激活吗?
当然可以,我扩展了TDcomConnection类,为其加入了用户名和密码,并修改其默认的DoConnect方法,使其在调用CoCreateInstanceEx时用指定的用户名和密码填充参数。代码如下:
unit SecDComConnection;
interface
uses
windows,SysUtils, Classes,ActiveX, DB, DBClient, MConnect,comobj,Midas;
type
{typedef struct _SEC_WINNT_AUTH_IDENTITY
unsigned short __RPC_FAR User;
unsigned long UserLength;
unsigned short __RPC_FAR Domain;
unsigned long DomainLength;
unsigned short __RPC_FAR Password;
unsigned long PasswordLength;
unsigned long Flags;
SEC_WINNT_AUTH_IDENTITY, PSEC_WINNT_AUTH_IDENTITY;
}
{typedef struct _COAUTHIDENTITY
USHORT User;
ULONG UserLength;
USHORT Domain;
ULONG DomainLength;
USHORT Password;
ULONG PasswordLength;
ULONG Flags;
COAUTHIDENTITY;}
{#define RPC_C_AUTHN_NONE 0
#define RPC_C_AUTHN_DCE_PRIVATE 1
#define RPC_C_AUTHN_DCE_PUBLIC 2
#define RPC_C_AUTHN_DEC_PUBLIC 4
#define RPC_C_AUTHN_GSS_NEGOTIATE 9
#define RPC_C_AUTHN_WINNT 10
#define RPC_C_AUTHN_GSS_SCHANNEL 14
#define RPC_C_AUTHN_GSS_KERBEROS 16
#define RPC_C_AUTHN_MSN 17
#define RPC_C_AUTHN_DPA 18
#define RPC_C_AUTHN_MQ 100
#define RPC_C_AUTHN_DEFAULT 0xFFFFFFFFL
}
{#define RPC_C_AUTHZ_NONE 0
#define RPC_C_AUTHZ_NAME 1
#define RPC_C_AUTHZ_DCE 2
#define RPC_C_AUTHZ_DEFAULT 0xFFFFFFFF }
{
#define RPC_C_AUTHN_LEVEL_DEFAULT 0
#define RPC_C_AUTHN_LEVEL_NONE 1
#define RPC_C_AUTHN_LEVEL_CONNECT 2
#define RPC_C_AUTHN_LEVEL_CALL 3
#define RPC_C_AUTHN_LEVEL_PKT 4
#define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5
#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6 }
{SEC_WINNT_AUTH_IDENTITY_UNICODE=2 }
pUnShort=^Word;
pCoAuthIdentity=^_CoAuthIdentity;
_CoAuthIdentity=record
user:pUnShort;
UserLength:ULONG;
Domain:pUnShort;
DomainLength:Ulong;
password:pUnShort;
PasswordLength:ulong;
Flags:ulong;
end;
_CoAuthInfo=record
dwAuthnSvc:DWORD;
dwAuthzSvc:DWORD;
pwszServerPrincName:WideString;
dwAuthnLevel:Dword;
dwImpersonationLevel:dword;
pAuthIdentityData:pCoAuthIdentity;
dwCapabilities:DWORD;
end;
TSecDComConnection = class(TDCOMConnection)
private
FCai:_CoAuthInfo;
FCid:_CoAuthIdentity;
FSvInfo:COSERVERINFO;
FUser:WideString;
FPassWord:WideString;
procedure SetPassword(const Value: wideString);
procedure SetUser(const Value: wideString);
procedure SetSvInfo(const Value: COSERVERINFO);
protected
procedure DoConnect; override;
public
property SvInfo:COSERVERINFO read FSvInfo write SetSvInfo;
constructor Create(AOwner: TComponent); override;
procedure MySetBlanket(itf:IUnknown;const vCai:_CoAuthInfo);
function GetServer: IAppServer; override;
published
property User:wideString read FUser write SetUser;
Property Password:wideString read FPassword write SetPassword;
end;
procedure Register;
implementation
constructor TSecDCOMConnectionCreate(AOwner: TComponent);
begin
inherited Create(AOwner);
FillMemory(@Fcai,sizeof(Fcai),0);
FillMemory(@FCid,sizeof(FCid),0);
FillMemory(@FSvInfo,sizeof(FSvInfo),0);
with FCai do begin
dwAuthnSvc:=10;//RPC_C_AUTHN_WINNT
dwAuthzSvc:=0;// RPC_C_AUTHZ_NONE
dwAuthnLevel:=0;//RPC_C_AUTHN_LEVEL_DEFAULT
dwImpersonationLevel:=3;
pAuthIdentityData:=@fcid;
dwCapabilities:=$0800;
end;
end;
procedure TSecDCOMConnectionDoConnect;
var
tmpCmpName:widestring;
IID_IUnknown:TGUID;
iiu:IDispatch;
Mqi:MULTI_QI;
qr:HRESULT;
begin
if (ObjectBroker) <> nil then
begin
repeat
if ComputerName = '' then
ComputerName := ObjectBrokerGetComputerForGUID(GetServerCLSID);
try
SetAppServer(CreateRemoteComObject(ComputerName, GetServerCLSID) as IDispatch);
ObjectBrokerSetConnectStatus(ComputerName, True);
except
ObjectBrokerSetConnectStatus(ComputerName, False);
ComputerName := '';
end;
until Connected;
end
else if (ComputerName <> '') then
begin
with fcid do begin
user:=pUnshort(@fuser[1]);
UserLength:=length(fuser);
tmpCmpName:=ComputerName;
Domain:=pUnshort(@tmpCmpName[1]);
DomainLength:=length(TmpCmpName);
password:=pUnShort(@FPassword[1]);
PasswordLength:=length(FPassword);
Flags:=2;//Unicode
end;
FSvInfopwszName:=pwidechar(tmpCmpName);
FSvinfopAuthInfo:=@Fcai;
IID_IUnknown:=IUnknown;
mqiIID:=@IID_IUnknown;mqiItf:=nil;mqihr:=0;
olecheck(CoCreateInstanceEx(GetServerCLSID,nil,CLSCTX_REMOTE_SERVER,@FSvinfo,1,@mqi));
olecheck(mqihr);
MySetBlanket(mqiItf,Fcai);
qr:=mqiItfQueryInterface(idispatch,iiu);
olecheck(qr);
MySetBlanket(IUnknown(iiu),FCai);
SetAppServer(iiu);
end
else
inherited DoConnect;
end;
function TSecDComConnectionGetServer: IAppServer;
var
QIResult: HResult;
begin
Connected := True;
QIResult := IDispatch(AppServer)QueryInterface(IAppServer, Result);
if QIResult <> S_OK then
begin
Result := TDispatchAppServerCreate(IAppServerDisp(IDispatch(AppServer)));
end;
MySetBlanket(IUnknown(Result),FCai);
end;
procedure TSecDCOMConnectionMySetBlanket(itf: IUnknown;
const vCai: _CoAuthInfo);
begin
with vCai do
CoSetProxyBlanket(Itf,dwAuthnSvc,dwAuthzSvc,pwidechar(pAuthIdentityData^Domain),
dwAuthnLevel,dwImpersonationLevel,pAuthIdentityData,dwCapabilities);
end;
procedure TSecDCOMConnectionSetPassword(const Value: wideString);
begin
FPassword := Value;
end;
procedure TSecDCOMConnectionSetSvInfo(const Value: COSERVERINFO);
begin
FSvInfo := Value;
end;
procedure TSecDCOMConnectionSetUser(const Value: wideString);
begin
FUser := Value;
end;
procedure Register;
begin
RegisterComponents('DataSnap', [TSecDComConnection]);
end;
end
代码中有一些C风格的注释,是因为delphi没有为我们预定义这些变量和数据结构。
如何使用呢?将这个组件安装在IDE中,并将其放到你的现有代码的远程数据模块中去,将原有指向TDOCMConnection的数据集控件设置成这个新的TSecDCOMConnection控件。然后你可以在远程计算机中设置最严格的安全选项。但是要记住应该为你要使用的用户设置合适的权限:给予远程激活权限、给予远程访问权限。
4、到现在还没有谈到访问的问题。首先激活和访问并不是一回事。一个用户可能拥有激活权限但没有访问权限,也有可能只有访问权限却无激活权限。前面谈到CoCreateInstacnceEx可以用另一身份激活对象并取得IunKnown指针的一个本地引用。如果你直接用这个指针去取得IappServer接口并调用方法,那么你很可能又会见到“拒绝访问”信息。这是IUnKnown指针的本地引用存在于客户机的进程中,再没有做特殊设置前,该指针继承了客户机进程的本地令牌,也就是说当用这个指针获取远程IappServer接口时,会用客户机当前登录令牌调用QueryInterface,在调用过程中远程计算机将有此令牌中缓存的用户名和密码进行再次登录验证,当然此时又会被拒绝,而后远程计算机再次尝试用GUEST帐户登录并获取com对象接口,此时若没有找开GUEST访问权限,则客户端访问失败,windows返回“拒绝访问”信息。那么怎样才能使QueryInterface调用也使用远程用户身份呢,这就要调用CoSetProxyBlanket强制设置本地接口引用使用远程用户的令牌。在上面的代码中,我用MySetBlanket包装了该API,以便使用激活时的用户身份调用QueryInterface。而后在取得的IappServer接口上再次调用MySetBlanket,保证在使用该接口时也采用远程用户身份。
MySetBlanket(mqiItf,Fcai);
qr:=mqiItfQueryInterface(idispatch,iiu);
olecheck(qr);
MySetBlanket(IUnknown(iiu),FCai);
为保证直接引用DataProvider的TclientDataSet也能按上述要求工作,在扩展的TSecDCOMConnection控件中,重载了GetServer方法。这样TSecDCOMConnection已能完全替换TDCOMConnection实现便利的com+应用编程了。
由于时间仓促,写这篇时很多术语没有做解释交待,因此可能会有一些不太好理解,但是出于为delphi Fans提供一个简单的实现安全性com访问的方法,我还是将这篇贴上来,主要是可以让需要的朋友直接复制代码用在自己的应用上。使用TSecDCOMConnection后,服务器方的com+对象可以强制找开访问检查,并打开组件级的访问检查。在打开访问检查的情况下,必须将服务器中允许访问com+对象的用户名加入到角色中才能正确访问。
(上述代码在delphi7/winXP sp2中调试通过,对于windows98和windows nt40及以下操作系统,由于CoCreateInstanceEx不能直接生成com+对象的安全上下文,因此代码不可用)
1、选择我的电脑-选择系统盘系统盘。
2、选择文件夹WINDOWS--选择文件夹system32--选择文件夹drivers---选择文件夹etc。
3、双击打开文件hosts,可以选择记事本方式打开。
4、打开之后会发现代表U8服务器的数字前面有两个符号“#”。
5、最后只需要把两个符号“#”删掉,然后保存文件关闭就可以了,然后重新登录就OK了。
1、网络问题客户端 ping 它有无返回
2、ps aux | grep ssh (ps -ef|grep ssh) -查询服务是否起来
3、查询端口是否符合预期
netstat -anp | grep ssh --查询服务的端口
4、防火墙是否允许访问22端口,防火墙是否开启
service iptables status, service iptables stop 关闭防火墙
5、客户端,服务端配置文件
0条评论