快要疯掉了!请高手千万援助!虽然只有35分,但已是倾家奉上!(35分)

  • 主题发起人 主题发起人 powersite
  • 开始时间 开始时间
P

powersite

Unregistered / Unconfirmed
GUEST, unregistred user!
快要疯掉了!
为了完成服务器端与客户端的文件传送。考虑到同时有许多Client连接,我两端用noBlocking模式。。在设计上的考虑是,我在客户端及服务器端建立一个TTrans类,然后Server端继承为ServerTrans,Client继承为TClientTrans类,类中设立FSocket,其类型为TCustomWinsocket,在类中实现具体的文件及信息传送任务。一旦SERVER接收到onClientConnect事件,便建立TServerTrans实例,并将onClientConnect的参数传送到TServerTrans中相应的处理入口:
在类TServerTrans中,该入口如下:
procedure TServerTrans.
constructor TServerTrans.Create(Socket: TCustomWinSocket);
begin
inherited Create;
FSocket:=Socket;
end;
传送参数实现如下:
procedure TfServer.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var
Trans:TServerTrans;
begin
Trans:=TServerTrans.Create(Socket);
Socket.Data:=Pointer(Trans);
Trans.FHandle:=Pointer(Trans);
end;
一旦Client提出请求,便根据相应的TServerTrans实例:TServerTrans(sSocket.Socket.Connections.Data)对于该Client进行文件传输。一旦某CLIENT完成目的,挂断后,SERVER端便将相应的TServerTrans实例释放:
procedure TfServer.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Socket.Data<>nil then
TServerTrans(Socket.Data).Free;
end;
如果操作一切正常,完成文件的对应传送完全正常。但如果某CLIENT非正常断线,而SERVER正在进行向该CLIENT传送文件,正由TSERVERTRANS类执行,有可能当SERVER端检测到ClientDisconnect于是将该对应对象实例释放,而程序体还在执行,将发生变量存取错误。
请教各位大侠是如果设计这种情况?感激不尽!
 
不懂,帮你UP
 
我也不懂,帮你UP
 
各位过往的大侠们,看到了吗? 请点拨一下,不胜感激!
 
默默地,等待,高手的出现!:-<
 
急!
还是没有人来帮我,
:=<
 
根据你所讲的东东,我想有两个方法处理,(你说得不很详细):
1。在Free 之前,将TSERVERTRANS类终止。
2。在ClientDisconnect里不要free,Socket.而将socket.Free写在ClientConnect里。
同时在ClientConnect将检测CLIENT挂断。
 
很长时间没上大富翁了,谢谢Rake8888,后来,我也是用了类似的方法,虽然说不上完美,但确实可以在相当程度上减少了错误
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
469
import
I
后退
顶部