大家帮帮忙,三层中不通过其他控件,客户端能不能被动接收数据(也就是应用服务器向客户端发数据)

huojiehai 2003-09-10 10:59:45
rt!
...全文
67 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
kunwang2001 2003-09-11
  • 打赏
  • 举报
回复
不太明白!
huojiehai 2003-09-10
  • 打赏
  • 举报
回复
收到!
duxin 2003-09-10
  • 打赏
  • 举报
回复
不贴了 n遍了都不行

海天子发到你油箱里了
rwdx 2003-09-10
  • 打赏
  • 举报
回复
使用com事件机制
duxin 2003-09-10
  • 打赏
  • 举报
回复

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin

ClientVar := CoDCOMServerSL1.Create;

if ClientVar.GetInfo(Edit1.Text,Edit2.Text) then

begin

Application.MessageBox('恭喜您,登录成功!','操作提示',MB_OK + MB_ICONINFORMATION);

end else

begin

Application.MessageBox('对不起,登录失败!','操作提示',MB_OK + MB_ICONINFORMATION);

end;

/////////////////////////////////////////////////////////////////////////////////////

/////////MyDCOMConnection.AppServer.ProcName;,也可以用这种进行回调

/////////CoDCOMBackCall = class

/////////class function Create: IDCOMBackCall;

////////class function CreateRemote(const MachineName: string): IDCOMBackCall;

////////end;

////////看一看它的定义,它其实是一个类,呵呵,协同接口类;是实现一个或多个接口的类,

///////有一个类生成库和一个类标识器;

///////这一部分是DCOM的,和回调无关;

///////////////////////////////////////////////////////////////////////////////////////

end;

{ TClientCallBack }

 

procedure TForm2.FormCreate(Sender: TObject);

var

TypeLib : ITypeLib;

begin

MyDCOMConnection := SocketConnection1;

MyDCOMConnection.Connected := True;

OLECheck(LoadRegTypeLib(LIBID_Server,0,0,1,TypeLib));

MyDCOMConnection.AppServer.GetInfos(FClientCallBack as IDispatch);

{/////////////////////////////////////////////////////////////////////////////

//////MyDCOMConnection := SocketConnection1;是回调的关键,你要用它来代替TSocketConnection,操作还是类实例之间,你明白吗?

//////MyDCOMConnection.Connected := True;还用说吗?

//////OLECheck(LoadRegTypeLib(LIBID_Server,0,0,1,TypeLib));在客户端注册;

//////MyDCOMConnection.AppServer.GetInfos(FClientCallBack as IDispatch);开始执行,而且进行接口转化;

//////TypeLib : ITypeLib;可以应用类型库类 Uses ActiveX;

//////////////////////////////////////////////////////////////////////////////}

end;

{ TClientCallBack }

procedure TClientCallBack.SetInfo(var InfoName, InfoPass: OleVariant);

begin

ShowMessage(InfoName);

ShowMessage(InfoPass);

{/////////////////////////////////////////////////////////////////////////////

/////我不知道你是否知道RDM中是如果引用接口的,这和它是一样的;

//////////////////////////////////////////////////////////////////////////////}

end;

end.

{=======================DCOM调用 VS 回调机制例程=======================

作者:小小;

创建日期:2002-10-24 01:49(凌晨,呵呵)

调试工具:Delphi6 VS Windows 2000;

参考文献:大脑,呵呵:)

信息反馈:dprogram@nxrs.net

交 www.nxrs.net/bbs

=========================================================================}

unit ServerRDM; ////////远程数据模块,是回调机制用的,于DCOM无关;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,

DBClient, Server_TLB, StdVcl;

type

TDCOMBackCall = class(TRemoteDataModule, IDCOMBackCall)

private

BackCallSL : OleVariant;

{ Private declarations }

protected

class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;

procedure GetInfos(var Infos: OleVariant); safecall;

public

{ Public declarations }

end;

implementation

huojiehai 2003-09-10
  • 打赏
  • 举报
回复
Upppp!!!!!
猛禽 2003-09-10
  • 打赏
  • 举报
回复
帮你UP
duxin 2003-09-10
  • 打赏
  • 举报
回复
海天子 这是小小的关于回调的

{=======================DCOM调用 VS 回调机制例程=======================

作者:小小;

创建日期:2002-10-24 01:49(凌晨,呵呵)

调试工具:Delphi6 VS Windows 2000;

参考文献:大脑,呵呵:)

信息反馈:dprogram@nxrs.net

交 流www.nxrs.net/bbs

=========================================================================}

unit ClientM; /////////客户端窗体;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,ComObj,Server_TLB,MConnect, DB, DBClient, SConnect,ActiveX,

ComServ;

type

TClientCallBack = Class(TAutoIntfObject , IDCOMBackCalls)

procedure SetInfo(var InfoName: OleVariant; var InfoPass: OleVariant); safecall;

end;

//////////////////////////////////////////////////////////////////////////////

//////////TClientCallBack = Class(TAutoIntfObject,IDCOMBackCalls) TClientCallBack 它继承类TAutoIntfObject

//////////同时又是实现了接口IDCOMBackCalls,而这个接口是需要在TypeLib中声明的;

///////////接口的实现,需要知道,之后还要进行类的实例化;

///////////需要实现这个接口的方法 :SetInfo(.....) SafeCall ,注意,这儿只能用SafeCall;

//////////下边有接口的实例化,FClientCallBack : TClientCallBack;

//////////uses ComObj;

/////////////////////////////////////////////////////////////////////////////////

TForm2 = class(TForm)

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

SocketConnection1: TSocketConnection;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

FClientCallBack : TClientCallBack;

/////////这一句是接口正真的实例化;

{ Private declarations }

public

MyDCOMConnection : TDispatchConnection;

//////注意这一句:TDispatchConnection 是如下定义的:

//////TDispatchConnection = class(TCustomRemoteServer)

{ Public declarations }

end;

var

Form2: TForm2;

ClientVar : IDCOMServerSL1;

//////////////////////////////////////////////////////////////////////////////

//////定义一个接口,是TypeLib中声明的哦;uses Server_TLB,(User TypeLib)

//////////////////////////////////////////////////////////////////////////////

implementation
duxin 2003-09-10
  • 打赏
  • 举报
回复
我就直到回复肯定会出错
@#$%#$%^#$%^
duxin 2003-09-10
  • 打赏
  • 举报
回复
海天子 这是小小的关于回调的

{=======================DCOM调用 VS 回调机制例程=======================

作者:小小;

创建日期:2002-10-24 01:49(凌晨,呵呵)

调试工具:Delphi6 VS Windows 2000;

参考文献:大脑,呵呵:)

信息反馈:dprogram@nxrs.net

交 流www.nxrs.net/bbs

=========================================================================}

unit ClientM; /////////客户端窗体;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,ComObj,Server_TLB,MConnect, DB, DBClient, SConnect,ActiveX,

ComServ;

type

TClientCallBack = Class(TAutoIntfObject , IDCOMBackCalls)

procedure SetInfo(var InfoName: OleVariant; var InfoPass: OleVariant); safecall;

end;

//////////////////////////////////////////////////////////////////////////////

//////////TClientCallBack = Class(TAutoIntfObject,IDCOMBackCalls) TClientCallBack 它继承类TAutoIntfObject

//////////同时又是实现了接口IDCOMBackCalls,而这个接口是需要在TypeLib中声明的;

///////////接口的实现,需要知道,之后还要进行类的实例化;

///////////需要实现这个接口的方法 :SetInfo(.....) SafeCall ,注意,这儿只能用SafeCall;

//////////下边有接口的实例化,FClientCallBack : TClientCallBack;

//////////uses ComObj;

/////////////////////////////////////////////////////////////////////////////////

TForm2 = class(TForm)

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

SocketConnection1: TSocketConnection;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

FClientCallBack : TClientCallBack;

/////////这一句是接口正真的实例化;

{ Private declarations }

public

MyDCOMConnection : TDispatchConnection;

//////注意这一句:TDispatchConnection 是如下定义的:

//////TDispatchConnection = class(TCustomRemoteServer)

{ Public declarations }

end;

var

Form2: TForm2;

ClientVar : IDCOMServerSL1;

//////////////////////////////////////////////////////////////////////////////

//////定义一个接口,是TypeLib中声明的哦;uses Server_TLB,(User TypeLib)

//////////////////////////////////////////////////////////////////////////////

implementation
huojiehai 2003-09-10
  • 打赏
  • 举报
回复
没关系,就算了散分吧!!
huojiehai 2003-09-10
  • 打赏
  • 举报
回复
没关系,给你分就是了,就当是放分吧!
猛禽 2003-09-10
  • 打赏
  • 举报
回复
呵,这个问题老啊,看看偶跟别人打的口水仗吧^_^

http://expert.csdn.net/Expert/topic/2088/2088928.xml?temp=.7983972
del_c_sharp 2003-09-10
  • 打赏
  • 举报
回复

28588343(海天子) 10:34:28
服务器端如何做呢?
391117(M-秋水长天) 10:34:59
服务器connect客户端的socket,然后send message
28588343(海天子) 10:35:53
有点晕!!
28588343(海天子) 10:37:03
转不过来!
17812012(摩托牛拉) 10:37:34
是阿,同样是socket呀~ 可以在你的服务器程序中加一个接口函数,专门负责发送消息(发送给服务器自己的fifo队列),由服务器的socket从fifo中取~~
你自己写了代理程序,这点代码应该难不住你
175322678( FrameSniper) 10:38:22
摩托,你们在讨论的东西是做什么用的?

17812012(摩托牛拉) 10:38:50
三层服务器回调
15294130(独心(小伍)) 10:38:54
midas
175322678( FrameSniper) 10:39:08
哦,高深,没有做过

28588343(海天子) 10:39:19
大家帮帮忙,三层中不通过其他控件,客户端能不能被动接收数据(也就是应用服务器向客户端发数据)
391117(M-秋水长天) 10:39:53
这实际上就是一个双向连接通道的问题
28588343(海天子) 10:40:00
我去论坛发个贴子
391117(M-秋水长天) 10:40:02
需要一个协议
391117(M-秋水长天) 10:40:11
DCOM直接支持
175322678( FrameSniper) 10:40:16
协议自己写还是有现成的
391117(M-秋水长天) 10:40:20
over tcp/ip的话要自己开发
15294130(独心(小伍)) 10:40:27
我只懂点回调
秋水长天 不建议用 你还是用消息吧


391117(M-秋水长天) 10:40:33
你现在的情况只能自己写
12049197( qxj游民) 10:40:41
有没有人做过两台PROFESSIONAL的如何配置DCOM
391117(M-秋水长天) 10:40:54
除非必要,否则不要用回调方式
175322678( FrameSniper) 10:40:44
基于TCP/IP的要自己开发?

391117(M-秋水长天) 10:40:58
是啊
175322678( FrameSniper) 10:41:14
三层中的回调过程是如何进行的,可以说说吗?
17812012(摩托牛拉) 10:41:18
其实绝大多数人都是用socket做的,回调只是大家没事练练手的东西
175322678( FrameSniper) 10:41:37
SOCKET,DELPHI提供空间吗?

15294130(独心(小伍)) 10:41:51
回调 我这里有个伴水的例子
12049197( qxj游民) 10:41:47
晕,你不会这都不知道
175322678( FrameSniper) 10:42:00
我是不知道啊

17812012(摩托牛拉) 10:42:08
至于回调,小小有篇文章可以看,虽然写的一塌糊涂。
12049197( qxj游民) 10:42:14
哈哈,
175322678( FrameSniper) 10:42:19
那里有啊,我去看看
15294130(独心(小伍)) 10:42:31
我也记得 小小的那一篇
12049197( qxj游民) 10:42:34
MOTO:两台PROFESSIONAL的如何配置DCOM
17812012(摩托牛拉) 10:42:31
找小小要阿~
28588343(海天子) 10:42:35
http://expert.csdn.net/Expert/topic/2243/2243567.xml?temp=.4650232
发了,我会给发鼓励下!
175322678( FrameSniper) 10:42:39
多层结构我没有用过
15294130(独心(小伍)) 10:42:55
fs 锰料理 好像有他的文章
17812012(摩托牛拉) 10:43:16
qxj游民:? 有什么不同码?
175322678( FrameSniper) 10:43:32
好了,不和你们糊料了,干活去了
12049197( qxj游民) 10:43:37
有,如果没有一台是SEVER的话怎么也连不上,
12049197( qxj游民) 10:43:48
如果一台是SEVER或XP的话就可以,
17812012(摩托牛拉) 10:43:54
呵呵,我从来没用serv
del_c_sharp 2003-09-10
  • 打赏
  • 举报
回复

28588343(海天子) 10:34:28
服务器端如何做呢?
391117(M-秋水长天) 10:34:59
服务器connect客户端的socket,然后send message
28588343(海天子) 10:35:53
有点晕!!
28588343(海天子) 10:37:03
转不过来!
17812012(摩托牛拉) 10:37:34
是阿,同样是socket呀~ 可以在你的服务器程序中加一个接口函数,专门负责发送消息(发送给服务器自己的fifo队列),由服务器的socket从fifo中取~~
你自己写了代理程序,这点代码应该难不住你
175322678( FrameSniper) 10:38:22
摩托,你们在讨论的东西是做什么用的?

17812012(摩托牛拉) 10:38:50
三层服务器回调
15294130(独心(小伍)) 10:38:54
midas
175322678( FrameSniper) 10:39:08
哦,高深,没有做过

28588343(海天子) 10:39:19
大家帮帮忙,三层中不通过其他控件,客户端能不能被动接收数据(也就是应用服务器向客户端发数据)
391117(M-秋水长天) 10:39:53
这实际上就是一个双向连接通道的问题
28588343(海天子) 10:40:00
我去论坛发个贴子
391117(M-秋水长天) 10:40:02
需要一个协议
391117(M-秋水长天) 10:40:11
DCOM直接支持
175322678( FrameSniper) 10:40:16
协议自己写还是有现成的
391117(M-秋水长天) 10:40:20
over tcp/ip的话要自己开发
15294130(独心(小伍)) 10:40:27
我只懂点回调
秋水长天 不建议用 你还是用消息吧


391117(M-秋水长天) 10:40:33
你现在的情况只能自己写
12049197( qxj游民) 10:40:41
有没有人做过两台PROFESSIONAL的如何配置DCOM
391117(M-秋水长天) 10:40:54
除非必要,否则不要用回调方式
175322678( FrameSniper) 10:40:44
基于TCP/IP的要自己开发?

391117(M-秋水长天) 10:40:58
是啊
175322678( FrameSniper) 10:41:14
三层中的回调过程是如何进行的,可以说说吗?
17812012(摩托牛拉) 10:41:18
其实绝大多数人都是用socket做的,回调只是大家没事练练手的东西
175322678( FrameSniper) 10:41:37
SOCKET,DELPHI提供空间吗?

15294130(独心(小伍)) 10:41:51
回调 我这里有个伴水的例子
12049197( qxj游民) 10:41:47
晕,你不会这都不知道
175322678( FrameSniper) 10:42:00
我是不知道啊

17812012(摩托牛拉) 10:42:08
至于回调,小小有篇文章可以看,虽然写的一塌糊涂。
12049197( qxj游民) 10:42:14
哈哈,
175322678( FrameSniper) 10:42:19
那里有啊,我去看看
15294130(独心(小伍)) 10:42:31
我也记得 小小的那一篇
12049197( qxj游民) 10:42:34
MOTO:两台PROFESSIONAL的如何配置DCOM
17812012(摩托牛拉) 10:42:31
找小小要阿~
28588343(海天子) 10:42:35
http://expert.csdn.net/Expert/topic/2243/2243567.xml?temp=.4650232
发了,我会给发鼓励下!
175322678( FrameSniper) 10:42:39
多层结构我没有用过
15294130(独心(小伍)) 10:42:55
fs 锰料理 好像有他的文章
17812012(摩托牛拉) 10:43:16
qxj游民:? 有什么不同码?
175322678( FrameSniper) 10:43:32
好了,不和你们糊料了,干活去了
12049197( qxj游民) 10:43:37
有,如果没有一台是SEVER的话怎么也连不上,
12049197( qxj游民) 10:43:48
如果一台是SEVER或XP的话就可以,
17812012(摩托牛拉) 10:43:54
呵呵,我从来没用serv
leapmars 2003-09-10
  • 打赏
  • 举报
回复
Mark
pandengzhe 2003-09-10
  • 打赏
  • 举报
回复
关注一下
huojiehai 2003-09-10
  • 打赏
  • 举报
回复
24287564(猛禽) 16:42:39
SocketConnection的Callbacks有问题
24287564(猛禽) 16:42:44
不建议使用
28588343(海天子) 16:42:51
看了一下帮助
For TSocketConnection, callbacks are optional. Set SupportCallbacks to True if you are using callbacks as part of the application server抯 interface. When SupportCallbacks is True, the socket connection component requires WinSock2. Set SupportCallbacks to False if you are not using callback functions and want to eliminate the dependency on WinSock2.

24287564(猛禽) 16:43:53
不止这些,打开Callback支持后,SocketConnection会有很多问题(即使没有使用CALLBACK也是)
28588343(海天子) 16:44:37
我们用的一直都是打开的支持
28588343(海天子) 16:46:09

DCOMConnection1 在广域网上好用吗,麻烦不麻烦
24287564(猛禽) 16:52:47
DCOM一般来说不能用于Internet
28588343(海天子) 16:54:22
呵呵,这样的话,回调就不合我的要求了,不爽
24287564(猛禽) 16:56:17
自己用SOCKET实现吧:)
15294130(独心(小伍)) 16:57:00
猛禽 发消息的做法 能不能大体说说

比方send 的时候怎么写参数
28588343(海天子) 17:00:14
给个思路吧!
我们的三层现在采用的是NMMsg1给客户端发消息,在局域内没问题,在网上是点对点也没问题,就是在代理时就出问题了
24287564(猛禽) 17:08:31
用代理时,除了拉以外,没有别的办法
28588343(海天子) 17:08:59

28588343(海天子) 17:10:02
我本来想能过回调绕过代理的
28588343(海天子) 17:10:16
我本来想通过回调绕过代理的

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧