CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  网络通信/分布式开发

有关ScktSrvr传输的压缩、加密及超时解决方法求教高手

楼主pengmai(阿迈)2004-12-03 10:45:29 在 Delphi / 网络通信/分布式开发 提问

各位大侠,小弟最近做一个Midas三层服务器,遇到不少问题,查看了以前的帖子,仍没有解决,还请大家帮忙解决,我分只有这么多,真不好意思,问题如下:  
  1、压缩  
    我知道用intrcpt.dll注册可能解决,但我想把它和Scktsrvr接合在一起,在服务端与客户端不需要注册就可以实现,请问怎么解决运用,即怎么样在Scktsrvr中调用DataIn和DataOut,因为我没有做成Com+,所以想直接接合在一起。  
  2、加密  
    怎么把加密也接合在Scktsrvr中。  
  3、什么好方法能解决超时的问题。  
  4、Scktsrvr中的ClientExecute过程怎么修改达到最好,ClientExecute源码如下,请帮忙。  
  procedure   TSocketDispatcherThread.ClientExecute;  
  var  
      Data:   IDataBlock;  
      msg:   TMsg;  
      Obj:   ISendDataBlock;  
      Event:   THandle;  
      WaitTime:   DWord;  
  begin  
      CoInitialize(nil);  
      try  
          Synchronize(AddClient);  
          FTransport   :=   CreateServerTransport;  
          try  
              Event   :=   FTransport.GetWaitEvent;  
              PeekMessage(msg,   0,   WM_USER,   WM_USER,   PM_NOREMOVE);  
              GetInterface(ISendDataBlock,   Obj);  
              if   FRegisteredOnly   then  
                  FInterpreter   :=   TDataBlockInterpreter.Create(Obj,   SSockets)   else    
                  FInterpreter   :=   TDataBlockInterpreter.Create(Obj,   '');  
              try  
                  Obj   :=   nil;  
                  if   FTimeout   =   0   then  
                      WaitTime   :=   INFINITE   else  
                      WaitTime   :=   60000;  
                  while   not   Terminated   and   FTransport.Connected   do  
                  try  
                      case   MsgWaitForMultipleObjects(1,   Event,   False,   WaitTime,   QS_ALLEVENTS)   of  
                          WAIT_OBJECT_0:  
                          begin  
                              WSAResetEvent(Event);  
                              Data   :=   FTransport.Receive(False,   0);  
                              if   Assigned(Data)   then  
                              begin  
                                  FLastActivity   :=   Now;  
                                  FInterpreter.InterpretData(Data);  
                                  Data   :=   nil;  
                                  FLastActivity   :=   Now;  
                              end;  
                          end;  
                          WAIT_OBJECT_0   +   1:  
                              while   PeekMessage(msg,   0,   0,   0,   PM_REMOVE)   do  
                                  DispatchMessage(msg);  
                          WAIT_TIMEOUT:  
                              if   (FTimeout   >   0)   and   ((Now   -   FLastActivity)   >   FTimeout)   then  
                                  FTransport.Connected   :=   False;  
                      end;  
                  except  
                      FTransport.Connected   :=   False;  
                  end;  
              finally  
                  FInterpreter.Free;  
                  FInterpreter   :=   nil;  
              end;  
          finally  
              FTransport   :=   nil;  
          end;  
      finally  
          CoUninitialize;  
          Synchronize(RemoveClient);  
      end;  
  end; 问题点数:100、回复次数:5Top

1 楼trainbox(rain)回复于 2004-12-03 10:50:48 得分 0

TSocketConnection就有关于intrcpt的设置,至于超时,这个只有增加timeout的值了  
   
  加解密算法很多的,搜索一下就有了Top

2 楼pengmai(阿迈)回复于 2004-12-03 15:02:10 得分 0

to   :   trainbox  
  thanks   Your   Answer。我也知道有啊,加密算法也知道,可不知道怎么加进去,做成Dll是没问题,可要注册,太麻烦了,我用的是midas,想只接写进去,而不用注册,能详细一点吗?Top

3 楼halfdream(哈欠)回复于 2004-12-03 15:48:23 得分 100

要改楼主可以从这儿下手。。其它地方不用变化。  
   
   
  function   TSocketTransport.CheckInterceptor:   Boolean;  
  var  
      GUID:   TGUID;  
  begin  
      if   not   Assigned(FInterceptor)   and   (FInterceptGUID   <>   '')   then  
          if   not   FCreateAttempted   then  
          try  
              FCreateAttempted   :=   True;  
              Guid   :=   StringToGuid(FInterceptGUID);  
              FInterceptor   :=   CreateComObject(Guid)   as   IDataIntercept;  
          except  
              {   raise   no   exception   if   the   creating   failed   }  
          end;  
      Result   :=   Assigned(FInterceptor);  
  end;  
   
  比如改成:  
  //===========================================================  
  function   TSocketTransport.CheckInterceptor:   Boolean;  
  var  
      GUID:   TGUID;  
  begin  
      if   not   Assigned(FInterceptor)     then  
      try  
          FInterceptor:=CreateMyInterceptor;  
      except  
          {   raise   no   exception   if   the   creating   failed   }  
      end;  
      Result   :=   Assigned(FInterceptor);  
  end;  
   
  function   CreateMyInterceptor:IInterceptor;  
  begin  
      Result:=TMyInterceptor.Create;  
  end;  
   
  TMyInterceptor=class(TInterfacedObject,IInterceptor)  
  ....  
  end;  
   
  Top

4 楼pengmai(阿迈)回复于 2004-12-03 17:16:16 得分 0

谢谢halfdream的回答,我先着去试试看,有结果再来散分。Top

5 楼nyf1220(我是党员----不过听说最近风声紧,打算换名字)回复于 2004-12-03 17:34:11 得分 0

呵呵,学习下Top

相关问题

  • 闲来侃一下:对一段文字是先加密后压缩好,还是先压缩后加密好??
  • 求加密及压缩算法源程序
  • 文件加密压缩的问题...高分求解!!!
  • 如何破解高版本加密压缩的RAR文件?
  • 请教,关于加密码压缩的方法。
  • 如何压缩加密的Access数据库?求助。。。。。。。。。。
  • 如何压缩加密的Access数据库?在线求助!
  • 关于调用web service前后数据集的压缩和加密问题
  • 有谁知道WinZip压缩文件的结构?或如何解开加密Winzip文件的密码?
  • 有谁知道WinZip压缩文件的结构,或如何解开加密Winzip文件的密码?

关键词

  • 加密
  • 解决
  • 注册
  • ftransport
  • scktsrvr
  • finterceptor
  • finterpreter
  • 超时
  • clientexecute
  • flastactivity

得分解答快速导航

  • 帖主:pengmai
  • halfdream

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo