不知道大家是否有这样的经验:
有时候调用
aSocketConnection.Connected := False;
会使客户端程序挂起几分钟时间。
但事实上上该调用很快就断开了与服务器的连接,并且ScktServ也显示连接已经断开,但是客户端却仍在阻塞,直到超时才返回。怎么回事呢?这个事情是随机发生的,在Borland NewsGroup上曾经有过这样的线索,但是我当时没认真看,只有个印象,现在碰到这个问题才想起,但是已经找不到这个线索了。不知道大家是怎样解决的。
有时候调用
aSocketConnection.Connected := False;
会使客户端程序挂起几分钟时间。
但事实上上该调用很快就断开了与服务器的连接,并且ScktServ也显示连接已经断开,但是客户端却仍在阻塞,直到超时才返回。怎么回事呢?这个事情是随机发生的,在Borland NewsGroup上曾经有过这样的线索,但是我当时没认真看,只有个印象,现在碰到这个问题才想起,但是已经找不到这个线索了。不知道大家是怎样解决的。
===========================
Delphi7
Win2000 SP2
一个CPU
ScktSrvr作为一个Service运行
没有防火墙
应用服务器和客户程序都在同一台机器上
应用服务器的DCOM配置为以Administrator身份启动
谢谢你的回答,我先试试。行的话,回头给分。不过还有没有别的办法呢?
谢谢,你的办法确实可行,我已另开一贴请你接分,请移步:。
http://expert.csdn.net/Expert/topic/1399/1399192.xml?temp=.4375574不过我还有一点问题,就是现在我还不懂得什么是Callback,到底有什么用,当然也没有用到这个特性。所以你的办法我就照办了。但是我想知道Callback做什么用,另外就是是否可以设置在SupportCallback情况下,SocketConnection断开连接时的超时的时间值,使它不要太久了,即使修改VCL的源码也可以,谢谢。
能否详细说说怎样改呢?或者说说Callback做什么用,怎么用
支持回调这个属性只是针对WINSOCK2来的,同组件调用的层次无关。如果无WINSOCK2支持,SCKTSERV选择支持回调会抛出异常。
支持回调属性主要是更好的利用WINSOCK2的功能,提高通讯效率(有些情况
适得其反,呵呵)//-----------------------
。
if SupportCallbacks then
if not LoadWinSock2 then raise Exception.CreateRes(@SNoWinSock2);
//---------------------------
。。
//这个函数是用来载入WINSOCK2动态库的。function LoadWinSock2: Boolean;
const
DLLName = 'ws2_32.dll';
begin
Result := hWinSock2 > 0;
if Result then Exit;
hWinSock2 := LoadLibrary(PChar(DLLName));
Result := hWinSock2 > 0;
if Result then
begin
WSACreateEvent := GetProcAddress(hWinSock2, 'WSACreateEvent');
WSAResetEvent := GetProcAddress(hWinSock2, 'WSAResetEvent');
WSACloseEvent := GetProcAddress(hWinSock2, 'WSACloseEvent');
WSAEventSelect := GetProcAddress(hWinSock2, 'WSAEventSelect');
end;
end;//------------------------------
但是Callback具体做什么用呢?能否举个简单的例子?
然后A就可以通过调用C来返回结果。
type
TProc= procedure(msg:string); //定义一个回调函数类型
//----------------------------------------
// 这是服务方procedure A(p:TProc);
begin
。。
if Assigned(p) then
begin
p('OK')
end;
end;
{--------------------------------------}//下面是客户方
procedure C(msg:string);
begin
ShowMessage(msg);
这儿的传入参数msg ,也就是B调用A的返回值,
在这儿作对应处理..end;procedure B;
begin
A(C);
end;//---------------------------------DELPHI的事件机制就是一种变型的回调.