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于是将该对应对象实例释放,而程序体还在执行,将发生变量存取错误。
请教各位大侠是如果设计这种情况?感激不尽!
为了完成服务器端与客户端的文件传送。考虑到同时有许多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于是将该对应对象实例释放,而程序体还在执行,将发生变量存取错误。
请教各位大侠是如果设计这种情况?感激不尽!