scktsrvr.exe其实是一堆TServerSocket,一个端口代表了一个TServerSocket,每个TServerSocket是基于多线程方式与客户端进行数据交换。它写了个TServerClientThread(在服务端中的客户端)的扩展
,多加了对客户端数据接收的管理解析,还有ActivityDateTime,GUID,一般不管它。但是我们用到的压缩只是跟这个GUID有关,其它费话少说。Server接受一个Client连接,则加一个TServerClientThread到本地中,用来监控Client Read 和Close事件,所以Server中的scktsrvr中我们只要了解了TServerClientThread动作方式就行了。
(
题外话:Server Socket中有客户端连接后,记录ClientSocket.Handle,并且将根据这个Handle产生一个TServerClientWinSocket对象加入到Connections(TList)对象中,当任何对这个Client的动作也就是说Server 发送和接收数据都是根据这个Client Handle来进行的,相应的ServerSocket中的Connections中的ClientSocket也发生相应的变化。
)有两个类跟这个TServerClientThread(实现ISendDataBlock接口)有关1: TDataBlockInterpreter(对发送过来的数据进行解析InterpretData(Data: IDataBlock))
  解析数据(水平有限,对它真是还是一知半解,有错请指出)
    接口类IDataBlock,由TDataBlock通过TMemoryStream的读写来实现,其中Signature是其主要标识,说明这个IDataBlock的数据类型    ,TDataBlockInterpreter根据Signature来对应进行相应的调用,   如:
     Client端连接后,在Server要运行应用服务器(Application Server),
     Client端需要得到ServerName 列表,
     Client端得到Server 的DataBroker的列表,
     Client端断开连接后,Server要Close应用服务器(Application Server),
     Client和Server的数据交换,也是由它来解析。
所以这个IDataBlock的数据很重要,而我们的压缩和解压就是针对于它,但是TDataBlockInterpreter是得到Data才对它解析,因而我们要在Send 和Recv 之前对它解压和压缩。这个任务在TSocketTransport身上。    2: TSocketTransport;(数据进行发送和接收, 实现ITransport接口)
  Server端:
     在Server端,TSocketTransport其实就是一个用来管理对ClientSocket实例,它将ClientSocket.Handle生成一个对象后,ClientSocket发送和接收过来的Data,在发送Data之前,它将调用InterceptOutgoing(Data: IDataBlock)函数,这个函数的功能是:
如果InterceptGUID <> '',那么它将根据这个GUID生成一个COM(Obj)对象,Obj.DataOut(Data: IDataBlock),也就是我们注册的那个压缩的DLL中的那个压缩函数,将压缩过后的Data再发送出去。这就完成compress and send Data.(我试过那个压缩功能,压缩比大概是1/9,像zip压缩比差不多).
由客户端传过来的数据调用InterceptIncoming(Data: IDataBlock)函数,这就不多说了,Data := 解压后的Data.  压缩和解压过后的Data交由TDataBlockInterpreter去解析,完成一次数据交换。  
  Client端:
    说完Server端,客户端的道理也是差不多的。唯一不同的是Server端中不调用ITransport.SetConnected()方法,因为它是根据ClientSocket.Handle生成的对象,也就是它是已经连接的对象,而Client端的TSocktConnection调用Connected := True时,其实就是调用ITransport.SetConnect将一个ClientSocket连接到Server端中的TServerSocket中,然后TServerSocket根据这个ClientSocket.Handle生成了一个TServerClientThread对象保存在本地中,开始对这个ClientSocket的监控(FD_Read, FD_Close消息事件).注:
  IDataBlock由TDataBlock实现,主要是管理TMemoryStream来存放数据
  ITransport由TSocketTransport实现,主要是用TClientSocket来连接TServerSocket,并和它进行交换数据。
  ISendDataBlock在Scktsrvr.exe中由TServerClientThread实现,通过TSocketTransport来发送数据.说了这么多,想必各们很明白了吧。:)
各位还可以扩展一下,对压缩之外,还可以对这个流(Data:IDataBlock)进行加密,那更过瘾,如果实现了,多谢告诉我一声。打了这么多,没有看,失败